diff --git a/packages/cdn/src/demo.js b/packages/cdn/src/demo.js index b46378d..56d8248 100644 --- a/packages/cdn/src/demo.js +++ b/packages/cdn/src/demo.js @@ -50,7 +50,12 @@ setTimeout(() => { window.pageAgent = new PageAgent(config) } else { console.log('🚀 page-agent.js no current script detected, using default demo config') - window.pageAgent = new PageAgent() + const config = { + model: DEMO_MODEL, + baseURL: DEMO_BASE_URL, + apiKey: DEMO_API_KEY, + } + window.pageAgent = new PageAgent(config) } console.log('🚀 page-agent.js initialized with config:', window.pageAgent.config) diff --git a/packages/llms/src/constants.ts b/packages/llms/src/constants.ts index 36f5358..26b9629 100644 --- a/packages/llms/src/constants.ts +++ b/packages/llms/src/constants.ts @@ -1,20 +1,3 @@ -// Dev environment: use .env config if available, otherwise fallback to testing api -export const DEFAULT_MODEL_NAME: string = - import.meta.env.DEV && import.meta.env.LLM_MODEL_NAME - ? import.meta.env.LLM_MODEL_NAME - : 'PAGE-AGENT-FREE-TESTING-RANDOM' - -export const DEFAULT_API_KEY: string = - import.meta.env.DEV && import.meta.env.LLM_API_KEY - ? import.meta.env.LLM_API_KEY - : 'PAGE-AGENT-FREE-TESTING-RANDOM' - -export const DEFAULT_BASE_URL: string = - import.meta.env.DEV && import.meta.env.LLM_BASE_URL - ? import.meta.env.LLM_BASE_URL - : 'https://hwcxiuzfylggtcktqgij.supabase.co/functions/v1/llm-testing-proxy' - -// internal - +// Internal constants export const LLM_MAX_RETRIES = 2 export const DEFAULT_TEMPERATURE = 0.7 // higher randomness helps auto-recovery diff --git a/packages/llms/src/index.ts b/packages/llms/src/index.ts index 3a79a17..6785b68 100644 --- a/packages/llms/src/index.ts +++ b/packages/llms/src/index.ts @@ -1,21 +1,23 @@ import { OpenAIClient } from './OpenAIClient' -import { - DEFAULT_API_KEY, - DEFAULT_BASE_URL, - DEFAULT_MODEL_NAME, - DEFAULT_TEMPERATURE, - LLM_MAX_RETRIES, -} from './constants' +import { DEFAULT_TEMPERATURE, LLM_MAX_RETRIES } from './constants' import { InvokeError } from './errors' import type { InvokeOptions, InvokeResult, LLMClient, LLMConfig, Message, Tool } from './types' export type { InvokeOptions, InvokeResult, LLMClient, LLMConfig, Message, Tool } export function parseLLMConfig(config: LLMConfig): Required { + // Runtime validation as defensive programming (types already guarantee these) + if (!config.baseURL || !config.apiKey || !config.model) { + throw new Error( + '[PageAgent] LLM configuration required. Please provide: baseURL, apiKey, model. ' + + 'See: https://alibaba.github.io/page-agent/#/docs/features/models' + ) + } + return { - baseURL: config.baseURL ?? DEFAULT_BASE_URL, - apiKey: config.apiKey ?? DEFAULT_API_KEY, - model: config.model ?? DEFAULT_MODEL_NAME, + baseURL: config.baseURL, + apiKey: config.apiKey, + model: config.model, temperature: config.temperature ?? DEFAULT_TEMPERATURE, maxRetries: config.maxRetries ?? LLM_MAX_RETRIES, customFetch: (config.customFetch ?? fetch).bind(globalThis), // fetch will be illegal unless bound diff --git a/packages/llms/src/types.ts b/packages/llms/src/types.ts index f51bd45..a3f819b 100644 --- a/packages/llms/src/types.ts +++ b/packages/llms/src/types.ts @@ -87,9 +87,9 @@ export interface InvokeResult { * LLM configuration */ export interface LLMConfig { - baseURL?: string - apiKey?: string - model?: string + baseURL: string + apiKey: string + model: string temperature?: number maxRetries?: number diff --git a/packages/page-agent/src/PageAgent.ts b/packages/page-agent/src/PageAgent.ts index 1c6ca3c..e05b01d 100644 --- a/packages/page-agent/src/PageAgent.ts +++ b/packages/page-agent/src/PageAgent.ts @@ -95,7 +95,7 @@ export class PageAgent extends EventTarget { /** History records */ history: AgentHistory[] = [] - constructor(config: PageAgentConfig = {}) { + constructor(config: PageAgentConfig) { super() this.config = config diff --git a/packages/page-agent/src/umd.ts b/packages/page-agent/src/umd.ts index 58b7907..82f3a42 100644 --- a/packages/page-agent/src/umd.ts +++ b/packages/page-agent/src/umd.ts @@ -35,7 +35,12 @@ setTimeout(() => { window.pageAgent = new PageAgent(config) } else { console.log('🚀 page-agent.js no current script detected, using default demo config') - window.pageAgent = new PageAgent() + const config: PageAgentConfig = { + model: DEMO_MODEL, + baseURL: DEMO_BASE_URL, + apiKey: DEMO_API_KEY, + } + window.pageAgent = new PageAgent(config) } console.log('🚀 page-agent.js initialized with config:', window.pageAgent.config) diff --git a/packages/website/src/constants.ts b/packages/website/src/constants.ts index 417853a..a20910c 100644 --- a/packages/website/src/constants.ts +++ b/packages/website/src/constants.ts @@ -7,3 +7,9 @@ export const CDN_DEMO_CN_URL = export const CDN_FULL_URL = 'https://cdn.jsdelivr.net/npm/@page-agent/cdn/dist/page-agent.js' export const CDN_FULL_CN_URL = 'https://registry.npmmirror.com/@page-agent/cdn/latest/files/dist/page-agent.js' + +// Demo LLM for website testing +export const DEMO_MODEL = 'PAGE-AGENT-FREE-TESTING-RANDOM' +export const DEMO_BASE_URL = + 'https://hwcxiuzfylggtcktqgij.supabase.co/functions/v1/llm-testing-proxy' +export const DEMO_API_KEY = 'PAGE-AGENT-FREE-TESTING-RANDOM' diff --git a/packages/website/src/pages/Home.tsx b/packages/website/src/pages/Home.tsx index dcd02c1..5b466c5 100644 --- a/packages/website/src/pages/Home.tsx +++ b/packages/website/src/pages/Home.tsx @@ -12,7 +12,13 @@ import { Highlighter } from '../components/ui/highlighter' import { NeonGradientCard } from '../components/ui/neon-gradient-card' import { Particles } from '../components/ui/particles' import { SparklesText } from '../components/ui/sparkles-text' -import { CDN_DEMO_CN_URL, CDN_DEMO_URL } from '../constants' +import { + CDN_DEMO_CN_URL, + CDN_DEMO_URL, + DEMO_API_KEY, + DEMO_BASE_URL, + DEMO_MODEL, +} from '../constants' function getInjection(useCN?: boolean) { const cdn = useCN ? CDN_DEMO_CN_URL : CDN_DEMO_URL @@ -73,13 +79,18 @@ export default function HomePage() { }, }, - // experimentalScriptExecutionTool: true, - - // testing server - // @note: rate limit. prompt limit. - // model: DEMO_MODEL, - // baseURL: DEMO_BASE_URL, - // apiKey: DEMO_API_KEY, + model: + import.meta.env.DEV && import.meta.env.LLM_MODEL_NAME + ? import.meta.env.LLM_MODEL_NAME + : DEMO_MODEL, + baseURL: + import.meta.env.DEV && import.meta.env.LLM_BASE_URL + ? import.meta.env.LLM_BASE_URL + : DEMO_BASE_URL, + apiKey: + import.meta.env.DEV && import.meta.env.LLM_API_KEY + ? import.meta.env.LLM_API_KEY + : DEMO_API_KEY, }) win.pageAgent = pageAgent }