From 9820d449a28aa2019ba669e0f74d1329e9eacbee Mon Sep 17 00:00:00 2001 From: sam-lippert Date: Wed, 28 May 2025 09:57:41 -0500 Subject: [PATCH] Make referer and title headers configurable --- .env.example | 2 ++ tasks/ai/generateObject.ts | 12 +++++++++--- tasks/ai/generateObjectArray.ts | 12 +++++++++--- tasks/ai/generateText.ts | 12 +++++++++--- 4 files changed, 29 insertions(+), 9 deletions(-) diff --git a/.env.example b/.env.example index f078c6ec9..1851fd217 100644 --- a/.env.example +++ b/.env.example @@ -30,6 +30,8 @@ LINEAR_CLIENT_SECRET="" AI_GATEWAY_URL="" AI_GATEWAY_TOKEN="" +AI_REFERER="" +AI_TITLE="" COMPOSIO_API_KEY="" COMPOSIO_WEBHOOK_SECRET="" # Must be Base64 encoded, can optionally start with whsec_ diff --git a/tasks/ai/generateObject.ts b/tasks/ai/generateObject.ts index 926837724..4ebb94fe4 100644 --- a/tasks/ai/generateObject.ts +++ b/tasks/ai/generateObject.ts @@ -6,7 +6,11 @@ type GenerateObjectInput = { args: any schema?: Record zodSchema?: any - settings?: any + settings?: { + referer?: string + title?: string + [key: string]: any + } } type GenerateObjectOutput = { @@ -59,13 +63,15 @@ export const generateObject = async ({ input, req }: { input: GenerateObjectInpu } const url = process.env.AI_GATEWAY_URL ? process.env.AI_GATEWAY_URL + '/v1/chat/completions' : 'https://openrouter.ai/api/v1/chat/completions' + const referer = settings?.referer || process.env.AI_REFERER + const title = settings?.title || process.env.AI_TITLE const response = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${process.env.AI_GATEWAY_TOKEN || process.env.OPEN_ROUTER_API_KEY}`, - 'HTTP-Referer': 'https://functions.do', // TODO: Figure out the proper logic to set/override the app - 'X-Title': 'Functions.do - Reliable Structured Outputs Without Complexity', // TODO: Figure out a dynamic place for the app title + ...(referer ? { 'HTTP-Referer': referer } : {}), + ...(title ? { 'X-Title': title } : {}), }, body: JSON.stringify(request), }) diff --git a/tasks/ai/generateObjectArray.ts b/tasks/ai/generateObjectArray.ts index 623d37635..82e006df0 100644 --- a/tasks/ai/generateObjectArray.ts +++ b/tasks/ai/generateObjectArray.ts @@ -5,7 +5,11 @@ type GenerateObjectArrayInput = { args: any schema?: Record zodSchema?: any - settings?: any + settings?: { + referer?: string + title?: string + [key: string]: any + } } type GenerateObjectArrayOutput = { @@ -54,13 +58,15 @@ export const generateObjectArray = async ({ input, req }: { input: GenerateObjec } const url = process.env.AI_GATEWAY_URL ? process.env.AI_GATEWAY_URL + '/v1/chat/completions' : 'https://openrouter.ai/api/v1/chat/completions' + const referer = settings?.referer || process.env.AI_REFERER + const title = settings?.title || process.env.AI_TITLE const response = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${process.env.AI_GATEWAY_TOKEN || process.env.OPEN_ROUTER_API_KEY}`, - 'HTTP-Referer': 'https://functions.do', // TODO: Figure out the proper logic to set/override the app - 'X-Title': 'Functions.do - Reliable Structured Outputs Without Complexity', // TODO: Figure out a dynamic place for the app title + ...(referer ? { 'HTTP-Referer': referer } : {}), + ...(title ? { 'X-Title': title } : {}), }, body: JSON.stringify(request), }) diff --git a/tasks/ai/generateText.ts b/tasks/ai/generateText.ts index 87a3d9916..e43d60891 100644 --- a/tasks/ai/generateText.ts +++ b/tasks/ai/generateText.ts @@ -2,7 +2,11 @@ type GenerateTextInput = { functionName: string args: any - settings?: any + settings?: { + referer?: string + title?: string + [key: string]: any + } } type GenerateTextOutput = { @@ -33,13 +37,15 @@ export const generateText = async ({ input, req }: { input: GenerateTextInput; r } const url = process.env.AI_GATEWAY_URL ? process.env.AI_GATEWAY_URL + '/v1/chat/completions' : 'https://openrouter.ai/api/v1/chat/completions' + const referer = settings?.referer || process.env.AI_REFERER + const title = settings?.title || process.env.AI_TITLE const response = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${process.env.AI_GATEWAY_TOKEN || process.env.OPEN_ROUTER_API_KEY}`, - 'HTTP-Referer': 'https://functions.do', // TODO: Figure out the proper logic to set/override the app - 'X-Title': 'Functions.do - Reliable Structured Outputs Without Complexity', // TODO: Figure out a dynamic place for the app title + ...(referer ? { 'HTTP-Referer': referer } : {}), + ...(title ? { 'X-Title': title } : {}), }, body: JSON.stringify(request), })