@promptbook/cli 0.92.0-3 → 0.92.0-4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,10 @@
1
1
  import { BOOK_LANGUAGE_VERSION, PROMPTBOOK_ENGINE_VERSION } from '../version';
2
2
  import { createDeepseekExecutionTools } from '../llm-providers/deepseek/createDeepseekExecutionTools';
3
+ import { DEEPSEEK_MODELS } from '../llm-providers/deepseek/deepseek-models';
3
4
  import type { DeepseekExecutionToolsOptions } from '../llm-providers/deepseek/DeepseekExecutionToolsOptions';
4
5
  import { _DeepseekRegistration } from '../llm-providers/deepseek/register-constructor';
5
6
  export { BOOK_LANGUAGE_VERSION, PROMPTBOOK_ENGINE_VERSION };
6
7
  export { createDeepseekExecutionTools };
8
+ export { DEEPSEEK_MODELS };
7
9
  export type { DeepseekExecutionToolsOptions };
8
10
  export { _DeepseekRegistration };
@@ -1,10 +1,12 @@
1
1
  import { BOOK_LANGUAGE_VERSION, PROMPTBOOK_ENGINE_VERSION } from '../version';
2
2
  import { createGoogleExecutionTools } from '../llm-providers/google/createGoogleExecutionTools';
3
+ import { GOOGLE_MODELS } from '../llm-providers/google/google-models';
3
4
  import type { GoogleExecutionToolsOptions } from '../llm-providers/google/GoogleExecutionToolsOptions';
4
5
  import { _GoogleRegistration } from '../llm-providers/google/register-constructor';
5
6
  import type { VercelExecutionToolsOptions } from '../llm-providers/vercel/VercelExecutionToolsOptions';
6
7
  export { BOOK_LANGUAGE_VERSION, PROMPTBOOK_ENGINE_VERSION };
7
8
  export { createGoogleExecutionTools };
9
+ export { GOOGLE_MODELS };
8
10
  export type { GoogleExecutionToolsOptions };
9
11
  export { _GoogleRegistration };
10
12
  export type { VercelExecutionToolsOptions };
@@ -0,0 +1,23 @@
1
+ import type { AvailableModel } from '../../execution/AvailableModel';
2
+ import type { number_usd } from '../../types/typeAliases';
3
+ /**
4
+ * List of available Deepseek models with descriptions
5
+ *
6
+ * Note: Done at 2025-04-22
7
+ *
8
+ * @see https://www.deepseek.com/models
9
+ * @public exported from `@promptbook/deepseek`
10
+ */
11
+ export declare const DEEPSEEK_MODELS: ReadonlyArray<AvailableModel & {
12
+ modelDescription?: string;
13
+ pricing?: {
14
+ readonly prompt: number_usd;
15
+ readonly output: number_usd;
16
+ };
17
+ }>;
18
+ /**
19
+ * TODO: [🧠] Add information about context window sizes, capabilities, and relative performance characteristics
20
+ * TODO: [🎰] Some mechanism to auto-update available models
21
+ * TODO: [🧠] Verify pricing information is current with Deepseek's official documentation
22
+ * Note: [💞] Ignore a discrepancy between file name and entity name
23
+ */
@@ -0,0 +1,23 @@
1
+ import type { AvailableModel } from '../../execution/AvailableModel';
2
+ import type { number_usd } from '../../types/typeAliases';
3
+ /**
4
+ * List of available Google models with descriptions
5
+ *
6
+ * Note: Done at 2025-04-22
7
+ *
8
+ * @see https://ai.google.dev/models/gemini
9
+ * @public exported from `@promptbook/google`
10
+ */
11
+ export declare const GOOGLE_MODELS: ReadonlyArray<AvailableModel & {
12
+ modelDescription?: string;
13
+ pricing?: {
14
+ readonly prompt: number_usd;
15
+ readonly output: number_usd;
16
+ };
17
+ }>;
18
+ /**
19
+ * TODO: [🧠] Add information about context window sizes, capabilities, and relative performance characteristics
20
+ * TODO: [🎰] Some mechanism to auto-update available models
21
+ * TODO: [🧠] Verify pricing information is current with Google's official documentation
22
+ * Note: [💞] Ignore a discrepancy between file name and entity name
23
+ */
@@ -8,7 +8,7 @@ import type { string_persona_description } from '../types/typeAliases';
8
8
  * @see https://github.com/webgptorg/promptbook/discussions/22
9
9
  * @public exported from `@promptbook/core`
10
10
  */
11
- export declare function preparePersona(personaDescription: string_persona_description, tools: Pick<ExecutionTools, 'llm'>, options: PrepareAndScrapeOptions): Promise<PersonaPreparedJson['modelRequirements']>;
11
+ export declare function preparePersona(personaDescription: string_persona_description, tools: Pick<ExecutionTools, 'llm'>, options: PrepareAndScrapeOptions): Promise<Pick<PersonaPreparedJson, 'modelsRequirements'>>;
12
12
  /**
13
13
  * TODO: [🔃][main] If the persona was prepared with different version or different set of models, prepare it once again
14
14
  * TODO: [🏢] Check validity of `modelName` in pipeline
@@ -30,11 +30,13 @@ export type PersonaJson = {
30
30
  */
31
31
  export type PersonaPreparedJson = PersonaJson & {
32
32
  /**
33
- * Model requirements for the persona
33
+ * Models requirements for the persona
34
+ *
35
+ * Sorted by relevance, best-fitting models is first
34
36
  *
35
37
  * Note: The model must be CHAT variant to be usable through persona
36
38
  */
37
- readonly modelRequirements: ChatModelRequirements;
39
+ readonly modelsRequirements: Array<ChatModelRequirements>;
38
40
  /**
39
41
  * List of preparation ids that were used to prepare this persona
40
42
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@promptbook/cli",
3
- "version": "0.92.0-3",
3
+ "version": "0.92.0-4",
4
4
  "description": "It's time for a paradigm shift. The future of software in plain English, French or Latin",
5
5
  "private": false,
6
6
  "sideEffects": false,
package/umd/index.umd.js CHANGED
@@ -56,7 +56,7 @@
56
56
  * @generated
57
57
  * @see https://github.com/webgptorg/promptbook
58
58
  */
59
- const PROMPTBOOK_ENGINE_VERSION = '0.92.0-3';
59
+ const PROMPTBOOK_ENGINE_VERSION = '0.92.0-4';
60
60
  /**
61
61
  * TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
62
62
  * Note: [💞] Ignore a discrepancy between file name and entity name
@@ -4471,7 +4471,7 @@
4471
4471
  * Note: [🟢] Code in this file should never be never released in packages that could be imported into browser environment
4472
4472
  */
4473
4473
 
4474
- var PipelineCollection = [{title:"Prepare Knowledge from Markdown",pipelineUrl:"https://promptbook.studio/promptbook/prepare-knowledge-from-markdown.book",formfactorName:"GENERIC",parameters:[{name:"knowledgeContent",description:"Markdown document content",isInput:true,isOutput:false},{name:"knowledgePieces",description:"The knowledge JSON object",isInput:false,isOutput:true}],tasks:[{taskType:"PROMPT_TASK",name:"knowledge",title:"Knowledge",content:"You are experienced data researcher, extract the important knowledge from the document.\n\n# Rules\n\n- Make pieces of information concise, clear, and easy to understand\n- One piece of information should be approximately 1 paragraph\n- Divide the paragraphs by markdown horizontal lines ---\n- Omit irrelevant information\n- Group redundant information\n- Write just extracted information, nothing else\n\n# The document\n\nTake information from this document:\n\n> {knowledgeContent}",resultingParameterName:"knowledgePieces",dependentParameterNames:["knowledgeContent"]}],personas:[],preparations:[],knowledgeSources:[],knowledgePieces:[],sources:[{type:"BOOK",path:null,content:"# Prepare Knowledge from Markdown\n\n- PIPELINE URL `https://promptbook.studio/promptbook/prepare-knowledge-from-markdown.book`\n- INPUT PARAMETER `{knowledgeContent}` Markdown document content\n- OUTPUT PARAMETER `{knowledgePieces}` The knowledge JSON object\n\n## Knowledge\n\n<!-- TODO: [🍆] -FORMAT JSON -->\n\n```markdown\nYou are experienced data researcher, extract the important knowledge from the document.\n\n# Rules\n\n- Make pieces of information concise, clear, and easy to understand\n- One piece of information should be approximately 1 paragraph\n- Divide the paragraphs by markdown horizontal lines ---\n- Omit irrelevant information\n- Group redundant information\n- Write just extracted information, nothing else\n\n# The document\n\nTake information from this document:\n\n> {knowledgeContent}\n```\n\n`-> {knowledgePieces}`\n"}],sourceFile:"./books/prepare-knowledge-from-markdown.book"},{title:"Prepare Keywords",pipelineUrl:"https://promptbook.studio/promptbook/prepare-knowledge-keywords.book",formfactorName:"GENERIC",parameters:[{name:"knowledgePieceContent",description:"The content",isInput:true,isOutput:false},{name:"keywords",description:"Keywords separated by comma",isInput:false,isOutput:true}],tasks:[{taskType:"PROMPT_TASK",name:"knowledge",title:"Knowledge",content:"You are experienced data researcher, detect the important keywords in the document.\n\n# Rules\n\n- Write just keywords separated by comma\n\n# The document\n\nTake information from this document:\n\n> {knowledgePieceContent}",resultingParameterName:"keywords",dependentParameterNames:["knowledgePieceContent"]}],personas:[],preparations:[],knowledgeSources:[],knowledgePieces:[],sources:[{type:"BOOK",path:null,content:"# Prepare Keywords\n\n- PIPELINE URL `https://promptbook.studio/promptbook/prepare-knowledge-keywords.book`\n- INPUT PARAMETER `{knowledgePieceContent}` The content\n- OUTPUT PARAMETER `{keywords}` Keywords separated by comma\n\n## Knowledge\n\n<!-- TODO: [🍆] -FORMAT JSON -->\n\n```markdown\nYou are experienced data researcher, detect the important keywords in the document.\n\n# Rules\n\n- Write just keywords separated by comma\n\n# The document\n\nTake information from this document:\n\n> {knowledgePieceContent}\n```\n\n`-> {keywords}`\n"}],sourceFile:"./books/prepare-knowledge-keywords.book"},{title:"Prepare Knowledge-piece Title",pipelineUrl:"https://promptbook.studio/promptbook/prepare-knowledge-title.book",formfactorName:"GENERIC",parameters:[{name:"knowledgePieceContent",description:"The content",isInput:true,isOutput:false},{name:"title",description:"The title of the document",isInput:false,isOutput:true}],tasks:[{taskType:"PROMPT_TASK",name:"knowledge",title:"Knowledge",content:"You are experienced content creator, write best title for the document.\n\n# Rules\n\n- Write just title, nothing else\n- Write maximum 5 words for the title\n\n# The document\n\n> {knowledgePieceContent}",resultingParameterName:"title",expectations:{words:{min:1,max:8}},dependentParameterNames:["knowledgePieceContent"]}],personas:[],preparations:[],knowledgeSources:[],knowledgePieces:[],sources:[{type:"BOOK",path:null,content:"# Prepare Knowledge-piece Title\n\n- PIPELINE URL `https://promptbook.studio/promptbook/prepare-knowledge-title.book`\n- INPUT PARAMETER `{knowledgePieceContent}` The content\n- OUTPUT PARAMETER `{title}` The title of the document\n\n## Knowledge\n\n- EXPECT MIN 1 WORD\n- EXPECT MAX 8 WORDS\n\n```markdown\nYou are experienced content creator, write best title for the document.\n\n# Rules\n\n- Write just title, nothing else\n- Write maximum 5 words for the title\n\n# The document\n\n> {knowledgePieceContent}\n```\n\n`-> {title}`\n"}],sourceFile:"./books/prepare-knowledge-title.book"},{title:"Prepare Persona",pipelineUrl:"https://promptbook.studio/promptbook/prepare-persona.book",formfactorName:"GENERIC",parameters:[{name:"availableModelNames",description:"List of available model names separated by comma (,)",isInput:true,isOutput:false},{name:"personaDescription",description:"Description of the persona",isInput:true,isOutput:false},{name:"modelRequirements",description:"Specific requirements for the model",isInput:false,isOutput:true}],tasks:[{taskType:"PROMPT_TASK",name:"make-model-requirements",title:"Make modelRequirements",content:"You are experienced AI engineer, you need to create virtual assistant.\nWrite\n\n## Example\n\n```json\n{\n\"modelName\": \"gpt-4o\",\n\"systemMessage\": \"You are experienced AI engineer and helpfull assistant.\",\n\"temperature\": 0.7\n}\n```\n\n## Instructions\n\n- Your output format is JSON object\n- Write just the JSON object, no other text should be present\n- It contains the following keys:\n - `modelName`: The name of the model to use\n - `systemMessage`: The system message to provide context to the model\n - `temperature`: The sampling temperature to use\n\n### Key `modelName`\n\nPick from the following models:\n\n- {availableModelNames}\n\n### Key `systemMessage`\n\nThe system message is used to communicate instructions or provide context to the model at the beginning of a conversation. It is displayed in a different format compared to user messages, helping the model understand its role in the conversation. The system message typically guides the model's behavior, sets the tone, or specifies desired output from the model. By utilizing the system message effectively, users can steer the model towards generating more accurate and relevant responses.\n\nFor example:\n\n> You are an experienced AI engineer and helpful assistant.\n\n> You are a friendly and knowledgeable chatbot.\n\n### Key `temperature`\n\nThe sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. If set to 0, the model will use log probability to automatically increase the temperature until certain thresholds are hit.\n\nYou can pick a value between 0 and 2. For example:\n\n- `0.1`: Low temperature, extremely conservative and deterministic\n- `0.5`: Medium temperature, balanced between conservative and creative\n- `1.0`: High temperature, creative and bit random\n- `1.5`: Very high temperature, extremely creative and often chaotic and unpredictable\n- `2.0`: Maximum temperature, completely random and unpredictable, for some extreme creative use cases\n\n# The assistant\n\nTake this description of the persona:\n\n> {personaDescription}",resultingParameterName:"modelRequirements",format:"JSON",dependentParameterNames:["availableModelNames","personaDescription"]}],personas:[],preparations:[],knowledgeSources:[],knowledgePieces:[],sources:[{type:"BOOK",path:null,content:"# Prepare Persona\n\n- PIPELINE URL `https://promptbook.studio/promptbook/prepare-persona.book`\n- INPUT PARAMETER `{availableModelNames}` List of available model names separated by comma (,)\n- INPUT PARAMETER `{personaDescription}` Description of the persona\n- OUTPUT PARAMETER `{modelRequirements}` Specific requirements for the model\n\n## Make modelRequirements\n\n- FORMAT JSON\n\n```markdown\nYou are experienced AI engineer, you need to create virtual assistant.\nWrite\n\n## Example\n\n\\`\\`\\`json\n{\n\"modelName\": \"gpt-4o\",\n\"systemMessage\": \"You are experienced AI engineer and helpfull assistant.\",\n\"temperature\": 0.7\n}\n\\`\\`\\`\n\n## Instructions\n\n- Your output format is JSON object\n- Write just the JSON object, no other text should be present\n- It contains the following keys:\n - `modelName`: The name of the model to use\n - `systemMessage`: The system message to provide context to the model\n - `temperature`: The sampling temperature to use\n\n### Key `modelName`\n\nPick from the following models:\n\n- {availableModelNames}\n\n### Key `systemMessage`\n\nThe system message is used to communicate instructions or provide context to the model at the beginning of a conversation. It is displayed in a different format compared to user messages, helping the model understand its role in the conversation. The system message typically guides the model's behavior, sets the tone, or specifies desired output from the model. By utilizing the system message effectively, users can steer the model towards generating more accurate and relevant responses.\n\nFor example:\n\n> You are an experienced AI engineer and helpful assistant.\n\n> You are a friendly and knowledgeable chatbot.\n\n### Key `temperature`\n\nThe sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. If set to 0, the model will use log probability to automatically increase the temperature until certain thresholds are hit.\n\nYou can pick a value between 0 and 2. For example:\n\n- `0.1`: Low temperature, extremely conservative and deterministic\n- `0.5`: Medium temperature, balanced between conservative and creative\n- `1.0`: High temperature, creative and bit random\n- `1.5`: Very high temperature, extremely creative and often chaotic and unpredictable\n- `2.0`: Maximum temperature, completely random and unpredictable, for some extreme creative use cases\n\n# The assistant\n\nTake this description of the persona:\n\n> {personaDescription}\n```\n\n`-> {modelRequirements}`\n"}],sourceFile:"./books/prepare-persona.book"},{title:"Prepare Title",pipelineUrl:"https://promptbook.studio/promptbook/prepare-title.book",formfactorName:"GENERIC",parameters:[{name:"book",description:"The book to prepare the title for",isInput:true,isOutput:false},{name:"title",description:"Best title for the book",isInput:false,isOutput:true}],tasks:[{taskType:"PROMPT_TASK",name:"make-title",title:"Make title",content:"Make best title for given text which describes the workflow:\n\n## Rules\n\n- Write just title, nothing else\n- Title should be concise and clear - Write maximum ideally 2 words, maximum 5 words\n- Title starts with emoticon\n- Title should not mention the input and output of the workflow but the main purpose of the workflow\n _For example, not \"✍ Convert Knowledge-piece to title\" but \"✍ Title\"_\n\n## The workflow\n\n> {book}",resultingParameterName:"title",expectations:{words:{min:1,max:8},lines:{min:1,max:1}},dependentParameterNames:["book"]}],personas:[],preparations:[],knowledgeSources:[],knowledgePieces:[],sources:[{type:"BOOK",path:null,content:"# Prepare Title\n\n- PIPELINE URL `https://promptbook.studio/promptbook/prepare-title.book`\n- INPUT PARAMETER `{book}` The book to prepare the title for\n- OUTPUT PARAMETER `{title}` Best title for the book\n\n## Make title\n\n- EXPECT MIN 1 Word\n- EXPECT MAX 8 Words\n- EXPECT EXACTLY 1 Line\n\n```markdown\nMake best title for given text which describes the workflow:\n\n## Rules\n\n- Write just title, nothing else\n- Title should be concise and clear - Write maximum ideally 2 words, maximum 5 words\n- Title starts with emoticon\n- Title should not mention the input and output of the workflow but the main purpose of the workflow\n _For example, not \"✍ Convert Knowledge-piece to title\" but \"✍ Title\"_\n\n## The workflow\n\n> {book}\n```\n\n`-> {title}`\n"}],sourceFile:"./books/prepare-title.book"}];
4474
+ var PipelineCollection = [{title:"Prepare Knowledge from Markdown",pipelineUrl:"https://promptbook.studio/promptbook/prepare-knowledge-from-markdown.book",formfactorName:"GENERIC",parameters:[{name:"knowledgeContent",description:"Markdown document content",isInput:true,isOutput:false},{name:"knowledgePieces",description:"The knowledge JSON object",isInput:false,isOutput:true}],tasks:[{taskType:"PROMPT_TASK",name:"knowledge",title:"Knowledge",content:"You are experienced data researcher, extract the important knowledge from the document.\n\n# Rules\n\n- Make pieces of information concise, clear, and easy to understand\n- One piece of information should be approximately 1 paragraph\n- Divide the paragraphs by markdown horizontal lines ---\n- Omit irrelevant information\n- Group redundant information\n- Write just extracted information, nothing else\n\n# The document\n\nTake information from this document:\n\n> {knowledgeContent}",resultingParameterName:"knowledgePieces",dependentParameterNames:["knowledgeContent"]}],personas:[],preparations:[],knowledgeSources:[],knowledgePieces:[],sources:[{type:"BOOK",path:null,content:"# Prepare Knowledge from Markdown\n\n- PIPELINE URL `https://promptbook.studio/promptbook/prepare-knowledge-from-markdown.book`\n- INPUT PARAMETER `{knowledgeContent}` Markdown document content\n- OUTPUT PARAMETER `{knowledgePieces}` The knowledge JSON object\n\n## Knowledge\n\n<!-- TODO: [🍆] -FORMAT JSON -->\n\n```markdown\nYou are experienced data researcher, extract the important knowledge from the document.\n\n# Rules\n\n- Make pieces of information concise, clear, and easy to understand\n- One piece of information should be approximately 1 paragraph\n- Divide the paragraphs by markdown horizontal lines ---\n- Omit irrelevant information\n- Group redundant information\n- Write just extracted information, nothing else\n\n# The document\n\nTake information from this document:\n\n> {knowledgeContent}\n```\n\n`-> {knowledgePieces}`\n"}],sourceFile:"./books/prepare-knowledge-from-markdown.book"},{title:"Prepare Keywords",pipelineUrl:"https://promptbook.studio/promptbook/prepare-knowledge-keywords.book",formfactorName:"GENERIC",parameters:[{name:"knowledgePieceContent",description:"The content",isInput:true,isOutput:false},{name:"keywords",description:"Keywords separated by comma",isInput:false,isOutput:true}],tasks:[{taskType:"PROMPT_TASK",name:"knowledge",title:"Knowledge",content:"You are experienced data researcher, detect the important keywords in the document.\n\n# Rules\n\n- Write just keywords separated by comma\n\n# The document\n\nTake information from this document:\n\n> {knowledgePieceContent}",resultingParameterName:"keywords",dependentParameterNames:["knowledgePieceContent"]}],personas:[],preparations:[],knowledgeSources:[],knowledgePieces:[],sources:[{type:"BOOK",path:null,content:"# Prepare Keywords\n\n- PIPELINE URL `https://promptbook.studio/promptbook/prepare-knowledge-keywords.book`\n- INPUT PARAMETER `{knowledgePieceContent}` The content\n- OUTPUT PARAMETER `{keywords}` Keywords separated by comma\n\n## Knowledge\n\n<!-- TODO: [🍆] -FORMAT JSON -->\n\n```markdown\nYou are experienced data researcher, detect the important keywords in the document.\n\n# Rules\n\n- Write just keywords separated by comma\n\n# The document\n\nTake information from this document:\n\n> {knowledgePieceContent}\n```\n\n`-> {keywords}`\n"}],sourceFile:"./books/prepare-knowledge-keywords.book"},{title:"Prepare Knowledge-piece Title",pipelineUrl:"https://promptbook.studio/promptbook/prepare-knowledge-title.book",formfactorName:"GENERIC",parameters:[{name:"knowledgePieceContent",description:"The content",isInput:true,isOutput:false},{name:"title",description:"The title of the document",isInput:false,isOutput:true}],tasks:[{taskType:"PROMPT_TASK",name:"knowledge",title:"Knowledge",content:"You are experienced content creator, write best title for the document.\n\n# Rules\n\n- Write just title, nothing else\n- Write maximum 5 words for the title\n\n# The document\n\n> {knowledgePieceContent}",resultingParameterName:"title",expectations:{words:{min:1,max:8}},dependentParameterNames:["knowledgePieceContent"]}],personas:[],preparations:[],knowledgeSources:[],knowledgePieces:[],sources:[{type:"BOOK",path:null,content:"# Prepare Knowledge-piece Title\n\n- PIPELINE URL `https://promptbook.studio/promptbook/prepare-knowledge-title.book`\n- INPUT PARAMETER `{knowledgePieceContent}` The content\n- OUTPUT PARAMETER `{title}` The title of the document\n\n## Knowledge\n\n- EXPECT MIN 1 WORD\n- EXPECT MAX 8 WORDS\n\n```markdown\nYou are experienced content creator, write best title for the document.\n\n# Rules\n\n- Write just title, nothing else\n- Write maximum 5 words for the title\n\n# The document\n\n> {knowledgePieceContent}\n```\n\n`-> {title}`\n"}],sourceFile:"./books/prepare-knowledge-title.book"},{title:"Prepare Persona",pipelineUrl:"https://promptbook.studio/promptbook/prepare-persona.book",formfactorName:"GENERIC",parameters:[{name:"availableModels",description:"List of available model names together with their descriptions as JSON",isInput:true,isOutput:false},{name:"personaDescription",description:"Description of the persona",isInput:true,isOutput:false},{name:"modelsRequirements",description:"Specific requirements for the model",isInput:false,isOutput:true}],tasks:[{taskType:"PROMPT_TASK",name:"make-model-requirements",title:"Make modelRequirements",content:"You are an experienced AI engineer, you need to find the best models for virtual assistants:\n\n## Example\n\n```json\n[\n {\n \"modelName\": \"gpt-4o\",\n \"systemMessage\": \"You are experienced AI engineer and helpfull assistant.\",\n \"temperature\": 0.7\n },\n {\n \"modelName\": \"claude-3-5-sonnet\",\n \"systemMessage\": \"You are a friendly and knowledgeable chatbot.\",\n \"temperature\": 0.5\n }\n]\n```\n\n## Instructions\n\n- Your output format is JSON array\n- Sort best-fitting models first\n- Omit any models that are not suitable\n- Write just the JSON, no other text should be present\n- Array contain items with following keys:\n - `modelName`: The name of the model to use\n - `systemMessage`: The system message to provide context to the model\n - `temperature`: The sampling temperature to use\n\n### Key `modelName`\n\nHere are the available models:\n\n```json\n{availableModels}\n```\n\n### Key `systemMessage`\n\nThe system message is used to communicate instructions or provide context to the model at the beginning of a conversation. It is displayed in a different format compared to user messages, helping the model understand its role in the conversation. The system message typically guides the model's behavior, sets the tone, or specifies desired output from the model. By utilizing the system message effectively, users can steer the model towards generating more accurate and relevant responses.\n\nFor example:\n\n> You are an experienced AI engineer and helpful assistant.\n\n> You are a friendly and knowledgeable chatbot.\n\n### Key `temperature`\n\nThe sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. If set to 0, the model will use log probability to automatically increase the temperature until certain thresholds are hit.\n\nYou can pick a value between 0 and 2. For example:\n\n- `0.1`: Low temperature, extremely conservative and deterministic\n- `0.5`: Medium temperature, balanced between conservative and creative\n- `1.0`: High temperature, creative and bit random\n- `1.5`: Very high temperature, extremely creative and often chaotic and unpredictable\n- `2.0`: Maximum temperature, completely random and unpredictable, for some extreme creative use cases\n\n# The assistant\n\nTake this description of the persona:\n\n> {personaDescription}",resultingParameterName:"modelsRequirements",format:"JSON",dependentParameterNames:["availableModels","personaDescription"]}],personas:[],preparations:[],knowledgeSources:[],knowledgePieces:[],sources:[{type:"BOOK",path:null,content:"# Prepare Persona\n\n- PIPELINE URL `https://promptbook.studio/promptbook/prepare-persona.book`\n- INPUT PARAMETER `{availableModels}` List of available model names together with their descriptions as JSON\n- INPUT PARAMETER `{personaDescription}` Description of the persona\n- OUTPUT PARAMETER `{modelsRequirements}` Specific requirements for the model\n\n## Make modelRequirements\n\n- FORMAT JSON\n\n```markdown\nYou are an experienced AI engineer, you need to find the best models for virtual assistants:\n\n## Example\n\n\\`\\`\\`json\n[\n {\n \"modelName\": \"gpt-4o\",\n \"systemMessage\": \"You are experienced AI engineer and helpfull assistant.\",\n \"temperature\": 0.7\n },\n {\n \"modelName\": \"claude-3-5-sonnet\",\n \"systemMessage\": \"You are a friendly and knowledgeable chatbot.\",\n \"temperature\": 0.5\n }\n]\n\\`\\`\\`\n\n## Instructions\n\n- Your output format is JSON array\n- Sort best-fitting models first\n- Omit any models that are not suitable\n- Write just the JSON, no other text should be present\n- Array contain items with following keys:\n - `modelName`: The name of the model to use\n - `systemMessage`: The system message to provide context to the model\n - `temperature`: The sampling temperature to use\n\n### Key `modelName`\n\nHere are the available models:\n\n\\`\\`\\`json\n{availableModels}\n\\`\\`\\`\n\n### Key `systemMessage`\n\nThe system message is used to communicate instructions or provide context to the model at the beginning of a conversation. It is displayed in a different format compared to user messages, helping the model understand its role in the conversation. The system message typically guides the model's behavior, sets the tone, or specifies desired output from the model. By utilizing the system message effectively, users can steer the model towards generating more accurate and relevant responses.\n\nFor example:\n\n> You are an experienced AI engineer and helpful assistant.\n\n> You are a friendly and knowledgeable chatbot.\n\n### Key `temperature`\n\nThe sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. If set to 0, the model will use log probability to automatically increase the temperature until certain thresholds are hit.\n\nYou can pick a value between 0 and 2. For example:\n\n- `0.1`: Low temperature, extremely conservative and deterministic\n- `0.5`: Medium temperature, balanced between conservative and creative\n- `1.0`: High temperature, creative and bit random\n- `1.5`: Very high temperature, extremely creative and often chaotic and unpredictable\n- `2.0`: Maximum temperature, completely random and unpredictable, for some extreme creative use cases\n\n# The assistant\n\nTake this description of the persona:\n\n> {personaDescription}\n```\n\n`-> {modelsRequirements}`\n"}],sourceFile:"./books/prepare-persona.book"},{title:"Prepare Title",pipelineUrl:"https://promptbook.studio/promptbook/prepare-title.book",formfactorName:"GENERIC",parameters:[{name:"book",description:"The book to prepare the title for",isInput:true,isOutput:false},{name:"title",description:"Best title for the book",isInput:false,isOutput:true}],tasks:[{taskType:"PROMPT_TASK",name:"make-title",title:"Make title",content:"Make best title for given text which describes the workflow:\n\n## Rules\n\n- Write just title, nothing else\n- Title should be concise and clear - Write maximum ideally 2 words, maximum 5 words\n- Title starts with emoticon\n- Title should not mention the input and output of the workflow but the main purpose of the workflow\n _For example, not \"✍ Convert Knowledge-piece to title\" but \"✍ Title\"_\n\n## The workflow\n\n> {book}",resultingParameterName:"title",expectations:{words:{min:1,max:8},lines:{min:1,max:1}},dependentParameterNames:["book"]}],personas:[],preparations:[],knowledgeSources:[],knowledgePieces:[],sources:[{type:"BOOK",path:null,content:"# Prepare Title\n\n- PIPELINE URL `https://promptbook.studio/promptbook/prepare-title.book`\n- INPUT PARAMETER `{book}` The book to prepare the title for\n- OUTPUT PARAMETER `{title}` Best title for the book\n\n## Make title\n\n- EXPECT MIN 1 Word\n- EXPECT MAX 8 Words\n- EXPECT EXACTLY 1 Line\n\n```markdown\nMake best title for given text which describes the workflow:\n\n## Rules\n\n- Write just title, nothing else\n- Title should be concise and clear - Write maximum ideally 2 words, maximum 5 words\n- Title starts with emoticon\n- Title should not mention the input and output of the workflow but the main purpose of the workflow\n _For example, not \"✍ Convert Knowledge-piece to title\" but \"✍ Title\"_\n\n## The workflow\n\n> {book}\n```\n\n`-> {title}`\n"}],sourceFile:"./books/prepare-title.book"}];
4475
4475
 
4476
4476
  /**
4477
4477
  * Function isValidJsonString will tell you if the string is valid JSON or not
@@ -4732,7 +4732,7 @@
4732
4732
  */
4733
4733
  function unpreparePipeline(pipeline) {
4734
4734
  let { personas, knowledgeSources, tasks } = pipeline;
4735
- personas = personas.map((persona) => ({ ...persona, modelRequirements: undefined, preparationIds: undefined }));
4735
+ personas = personas.map((persona) => ({ ...persona, modelsRequirements: undefined, preparationIds: undefined }));
4736
4736
  knowledgeSources = knowledgeSources.map((knowledgeSource) => ({ ...knowledgeSource, preparationIds: undefined }));
4737
4737
  tasks = tasks.map((task) => {
4738
4738
  let { dependentParameterNames } = task;
@@ -4890,7 +4890,7 @@
4890
4890
  if (pipeline.title === undefined || pipeline.title === '' || pipeline.title === DEFAULT_BOOK_TITLE) {
4891
4891
  return false;
4892
4892
  }
4893
- if (!pipeline.personas.every((persona) => persona.modelRequirements !== undefined)) {
4893
+ if (!pipeline.personas.every((persona) => persona.modelsRequirements !== undefined)) {
4894
4894
  return false;
4895
4895
  }
4896
4896
  if (!pipeline.knowledgeSources.every((knowledgeSource) => knowledgeSource.preparationIds !== undefined)) {
@@ -7050,27 +7050,40 @@
7050
7050
  pipeline: await collection.getPipelineByUrl('https://promptbook.studio/promptbook/prepare-persona.book'),
7051
7051
  tools,
7052
7052
  });
7053
- // TODO: [🚐] Make arrayable LLMs -> single LLM DRY
7054
7053
  const _llms = arrayableToArray(tools.llm);
7055
7054
  const llmTools = _llms.length === 1 ? _llms[0] : joinLlmExecutionTools(..._llms);
7056
- const availableModels = await llmTools.listModels();
7057
- const availableModelNames = availableModels
7055
+ const availableModels = (await llmTools.listModels())
7058
7056
  .filter(({ modelVariant }) => modelVariant === 'CHAT')
7059
- .map(({ modelName }) => modelName)
7060
- .join(',');
7061
- const result = await preparePersonaExecutor({ availableModelNames, personaDescription }).asPromise();
7057
+ .map(({ modelName, modelDescription }) => ({
7058
+ modelName,
7059
+ modelDescription,
7060
+ // <- Note: `modelTitle` and `modelVariant` is not relevant for this task
7061
+ }));
7062
+ const result = await preparePersonaExecutor({
7063
+ availableModels /* <- Note: Passing as JSON */,
7064
+ personaDescription,
7065
+ }).asPromise();
7062
7066
  const { outputParameters } = result;
7063
- const { modelRequirements: modelRequirementsRaw } = outputParameters;
7064
- const modelRequirements = JSON.parse(modelRequirementsRaw);
7067
+ const { modelsRequirements: modelsRequirementsJson } = outputParameters;
7068
+ const modelsRequirementsUnchecked = JSON.parse(modelsRequirementsJson);
7065
7069
  if (isVerbose) {
7066
- console.info(`PERSONA ${personaDescription}`, modelRequirements);
7070
+ console.info(`PERSONA ${personaDescription}`, modelsRequirementsUnchecked);
7067
7071
  }
7068
- const { modelName, systemMessage, temperature } = modelRequirements;
7069
- return {
7072
+ if (!Array.isArray(modelsRequirementsUnchecked)) {
7073
+ throw new UnexpectedError(spaceTrim__default["default"]((block) => `
7074
+ Invalid \`modelsRequirements\`:
7075
+
7076
+ \`\`\`json
7077
+ ${block(JSON.stringify(modelsRequirementsUnchecked, null, 4))}
7078
+ \`\`\`
7079
+ `));
7080
+ }
7081
+ const modelsRequirements = modelsRequirementsUnchecked.map((modelRequirements) => ({
7070
7082
  modelVariant: 'CHAT',
7071
- modelName,
7072
- systemMessage,
7073
- temperature,
7083
+ ...modelRequirements,
7084
+ }));
7085
+ return {
7086
+ modelsRequirements,
7074
7087
  };
7075
7088
  }
7076
7089
  /**
@@ -7497,14 +7510,14 @@
7497
7510
  // TODO: [🖌][🧠] Implement some `mapAsync` function
7498
7511
  const preparedPersonas = new Array(personas.length);
7499
7512
  await forEachAsync(personas, { maxParallelCount /* <- TODO: [🪂] When there are subtasks, this maximul limit can be broken */ }, async (persona, index) => {
7500
- const modelRequirements = await preparePersona(persona.description, { ...tools, llm: llmToolsWithUsage }, {
7513
+ const { modelsRequirements } = await preparePersona(persona.description, { ...tools, llm: llmToolsWithUsage }, {
7501
7514
  rootDirname,
7502
7515
  maxParallelCount /* <- TODO: [🪂] */,
7503
7516
  isVerbose,
7504
7517
  });
7505
7518
  const preparedPersona = {
7506
7519
  ...persona,
7507
- modelRequirements,
7520
+ modelsRequirements,
7508
7521
  preparationIds: [/* TODO: [🧊] -> */ currentPreparation.id],
7509
7522
  // <- TODO: [🍙] Make some standard order of json properties
7510
7523
  };
@@ -14235,7 +14248,7 @@
14235
14248
  },
14236
14249
  {
14237
14250
  modelVariant: 'CHAT',
14238
- modelTitle: ' Claude Instant 1.2',
14251
+ modelTitle: 'Claude Instant 1.2',
14239
14252
  modelName: 'claude-instant-1.2',
14240
14253
  modelDescription: 'Older, faster Claude model optimized for high throughput applications. Lower cost but less capable than newer models. 100K context window.',
14241
14254
  pricing: {
@@ -14745,7 +14758,7 @@
14745
14758
  modelDescription: 'Legacy completion model with strong performance on text generation tasks. Optimized for complex instructions and longer outputs.',
14746
14759
  pricing: {
14747
14760
  prompt: computeUsage(`$2.00 / 1M tokens`),
14748
- output: computeUsage(`$2.00 / 1M tokens`), // <- not sure
14761
+ output: computeUsage(`$2.00 / 1M tokens`),
14749
14762
  },
14750
14763
  },
14751
14764
  /**/
@@ -14887,8 +14900,8 @@
14887
14900
  modelName: 'gpt-3.5-turbo',
14888
14901
  modelDescription: 'Latest version of GPT-3.5 Turbo with improved performance and instruction following capabilities. Default 4K context window with options for 16K.',
14889
14902
  pricing: {
14890
- prompt: computeUsage(`$3.00 / 1M tokens`),
14891
- output: computeUsage(`$6.00 / 1M tokens`), // <- Not sure, refer to gpt-3.5-turbo in Fine-tuning models
14903
+ prompt: computeUsage(`$0.50 / 1M tokens`),
14904
+ output: computeUsage(`$1.50 / 1M tokens`),
14892
14905
  },
14893
14906
  },
14894
14907
  /**/
@@ -14912,7 +14925,7 @@
14912
14925
  modelDescription: 'Efficient legacy completion model with a good balance of performance and speed. Suitable for straightforward text generation tasks.',
14913
14926
  pricing: {
14914
14927
  prompt: computeUsage(`$0.40 / 1M tokens`),
14915
- output: computeUsage(`$0.40 / 1M tokens`), // <- Not sure
14928
+ output: computeUsage(`$0.40 / 1M tokens`),
14916
14929
  },
14917
14930
  },
14918
14931
  /**/
@@ -14966,7 +14979,7 @@
14966
14979
  modelDescription: 'Preview version of GPT-4 Turbo that points to the latest model version. Features improved instruction following, 128K token context window and lower latency.',
14967
14980
  pricing: {
14968
14981
  prompt: computeUsage(`$10.00 / 1M tokens`),
14969
- output: computeUsage(`$30.00 / 1M tokens`), // <- Not sure, just for gpt-4-turbo
14982
+ output: computeUsage(`$30.00 / 1M tokens`),
14970
14983
  },
14971
14984
  },
14972
14985
  /**/
@@ -15117,10 +15130,10 @@
15117
15130
  modelVariant: 'CHAT',
15118
15131
  modelTitle: 'o1',
15119
15132
  modelName: 'o1',
15133
+ modelDescription: "OpenAI's advanced reasoning model focused on logic and problem-solving. Designed for complex analytical tasks with rigorous step-by-step reasoning. 128K context window.",
15120
15134
  pricing: {
15121
- prompt: computeUsage(`$3.00 / 1M tokens`),
15122
- output: computeUsage(`$12.00 / 1M tokens`),
15123
- // <- TODO: !! Unsure, check the pricing
15135
+ prompt: computeUsage(`$15.00 / 1M tokens`),
15136
+ output: computeUsage(`$60.00 / 1M tokens`),
15124
15137
  },
15125
15138
  },
15126
15139
  /**/
@@ -15129,7 +15142,7 @@
15129
15142
  modelVariant: 'CHAT',
15130
15143
  modelTitle: 'o3-mini',
15131
15144
  modelName: 'o3-mini',
15132
- modelDescription: 'Compact and efficient reasoning model specializing in problem-solving with a focus on research and analysis tasks.',
15145
+ modelDescription: 'Cost-effective reasoning model optimized for academic and scientific problem-solving. Efficient performance on STEM tasks with deep mathematical and scientific knowledge. 128K context window.',
15133
15146
  pricing: {
15134
15147
  prompt: computeUsage(`$3.00 / 1M tokens`),
15135
15148
  output: computeUsage(`$12.00 / 1M tokens`),
@@ -15708,6 +15721,67 @@
15708
15721
  };
15709
15722
  }
15710
15723
 
15724
+ /**
15725
+ * List of available Deepseek models with descriptions
15726
+ *
15727
+ * Note: Done at 2025-04-22
15728
+ *
15729
+ * @see https://www.deepseek.com/models
15730
+ * @public exported from `@promptbook/deepseek`
15731
+ */
15732
+ const DEEPSEEK_MODELS = exportJson({
15733
+ name: 'DEEPSEEK_MODELS',
15734
+ value: [
15735
+ {
15736
+ modelVariant: 'CHAT',
15737
+ modelTitle: 'Deepseek Chat',
15738
+ modelName: 'deepseek-chat',
15739
+ modelDescription: 'General-purpose language model with strong performance across conversation, reasoning, and content generation. 128K context window with excellent instruction following capabilities.',
15740
+ pricing: {
15741
+ prompt: computeUsage(`$1.00 / 1M tokens`),
15742
+ output: computeUsage(`$2.00 / 1M tokens`),
15743
+ },
15744
+ },
15745
+ {
15746
+ modelVariant: 'CHAT',
15747
+ modelTitle: 'Deepseek Reasoner',
15748
+ modelName: 'deepseek-reasoner',
15749
+ modelDescription: 'Specialized model focused on complex reasoning tasks like mathematical problem-solving and logical analysis. Enhanced step-by-step reasoning with explicit chain-of-thought processes. 128K context window.',
15750
+ pricing: {
15751
+ prompt: computeUsage(`$4.00 / 1M tokens`),
15752
+ output: computeUsage(`$8.00 / 1M tokens`),
15753
+ },
15754
+ },
15755
+ {
15756
+ modelVariant: 'CHAT',
15757
+ modelTitle: 'DeepSeek V3',
15758
+ modelName: 'deepseek-v3-0324',
15759
+ modelDescription: 'Advanced general-purpose model with improved reasoning, coding abilities, and multimodal understanding. Built on the latest DeepSeek architecture with enhanced knowledge representation.',
15760
+ pricing: {
15761
+ prompt: computeUsage(`$1.50 / 1M tokens`),
15762
+ output: computeUsage(`$3.00 / 1M tokens`),
15763
+ },
15764
+ },
15765
+ {
15766
+ modelVariant: 'CHAT',
15767
+ modelTitle: 'DeepSeek R1',
15768
+ modelName: 'deepseek-r1',
15769
+ modelDescription: 'Research-focused model optimized for scientific problem-solving and analytical tasks. Excellent performance on tasks requiring domain-specific expertise and critical thinking.',
15770
+ pricing: {
15771
+ prompt: computeUsage(`$5.00 / 1M tokens`),
15772
+ output: computeUsage(`$10.00 / 1M tokens`),
15773
+ },
15774
+ },
15775
+ // <- [🕕]
15776
+ ],
15777
+ });
15778
+ /**
15779
+ * TODO: [🧠] Add information about context window sizes, capabilities, and relative performance characteristics
15780
+ * TODO: [🎰] Some mechanism to auto-update available models
15781
+ * TODO: [🧠] Verify pricing information is current with Deepseek's official documentation
15782
+ * Note: [💞] Ignore a discrepancy between file name and entity name
15783
+ */
15784
+
15711
15785
  /**
15712
15786
  * Execution Tools for calling Deepseek API.
15713
15787
  *
@@ -15729,18 +15803,7 @@
15729
15803
  title: 'Deepseek',
15730
15804
  description: 'Implementation of Deepseek models',
15731
15805
  vercelProvider: deepseekVercelProvider,
15732
- availableModels: [
15733
- {
15734
- modelName: 'deepseek-chat',
15735
- modelVariant: 'CHAT',
15736
- },
15737
- {
15738
- modelName: 'deepseek-reasoner',
15739
- modelVariant: 'CHAT',
15740
- },
15741
- // <- [🕕]
15742
- // <- TODO: How picking of the default model looks like in `createExecutionToolsFromVercelProvider`
15743
- ],
15806
+ availableModels: DEEPSEEK_MODELS,
15744
15807
  ...options,
15745
15808
  });
15746
15809
  }, {
@@ -15815,6 +15878,173 @@
15815
15878
  * Note: [💞] Ignore a discrepancy between file name and entity name
15816
15879
  */
15817
15880
 
15881
+ /**
15882
+ * List of available Google models with descriptions
15883
+ *
15884
+ * Note: Done at 2025-04-22
15885
+ *
15886
+ * @see https://ai.google.dev/models/gemini
15887
+ * @public exported from `@promptbook/google`
15888
+ */
15889
+ const GOOGLE_MODELS = exportJson({
15890
+ name: 'GOOGLE_MODELS',
15891
+ value: [
15892
+ {
15893
+ modelVariant: 'CHAT',
15894
+ modelTitle: 'Gemini 2.5 Pro',
15895
+ modelName: 'gemini-2.5-pro-preview-03-25',
15896
+ modelDescription: 'Latest advanced multimodal model with exceptional reasoning, tool use, and instruction following. 1M token context window with improved vision capabilities for complex visual tasks.',
15897
+ pricing: {
15898
+ prompt: computeUsage(`$7.00 / 1M tokens`),
15899
+ output: computeUsage(`$21.00 / 1M tokens`),
15900
+ },
15901
+ },
15902
+ {
15903
+ modelVariant: 'CHAT',
15904
+ modelTitle: 'Gemini 2.0 Flash',
15905
+ modelName: 'gemini-2.0-flash',
15906
+ modelDescription: 'Fast, efficient model optimized for rapid response times. Good balance between performance and cost, with strong capabilities across text, code, and reasoning tasks. 128K context window.',
15907
+ pricing: {
15908
+ prompt: computeUsage(`$0.35 / 1M tokens`),
15909
+ output: computeUsage(`$1.05 / 1M tokens`),
15910
+ },
15911
+ },
15912
+ {
15913
+ modelVariant: 'CHAT',
15914
+ modelTitle: 'Gemini 2.0 Flash Lite',
15915
+ modelName: 'gemini-2.0-flash-lite',
15916
+ modelDescription: 'Streamlined version of Gemini 2.0 Flash, designed for extremely low-latency applications and edge deployments. Optimized for efficiency while maintaining core capabilities.',
15917
+ pricing: {
15918
+ prompt: computeUsage(`$0.20 / 1M tokens`),
15919
+ output: computeUsage(`$0.60 / 1M tokens`),
15920
+ },
15921
+ },
15922
+ {
15923
+ modelVariant: 'CHAT',
15924
+ modelTitle: 'Gemini 2.0 Flash Thinking',
15925
+ modelName: 'gemini-2.0-flash-thinking-exp-01-21',
15926
+ modelDescription: 'Experimental model focused on enhanced reasoning with explicit chain-of-thought processes. Designed for tasks requiring structured thinking and problem-solving approaches.',
15927
+ pricing: {
15928
+ prompt: computeUsage(`$0.35 / 1M tokens`),
15929
+ output: computeUsage(`$1.05 / 1M tokens`),
15930
+ },
15931
+ },
15932
+ {
15933
+ modelVariant: 'CHAT',
15934
+ modelTitle: 'Gemini 1.5 Flash',
15935
+ modelName: 'gemini-1.5-flash',
15936
+ modelDescription: 'Efficient model balancing speed and quality for general-purpose applications. 1M token context window with good multimodal capabilities and quick response times.',
15937
+ pricing: {
15938
+ prompt: computeUsage(`$0.35 / 1M tokens`),
15939
+ output: computeUsage(`$1.05 / 1M tokens`),
15940
+ },
15941
+ },
15942
+ {
15943
+ modelVariant: 'CHAT',
15944
+ modelTitle: 'Gemini 1.5 Flash Latest',
15945
+ modelName: 'gemini-1.5-flash-latest',
15946
+ modelDescription: 'Points to the latest version of Gemini 1.5 Flash, ensuring access to the most recent improvements and bug fixes while maintaining stable interfaces.',
15947
+ },
15948
+ {
15949
+ modelVariant: 'CHAT',
15950
+ modelTitle: 'Gemini 1.5 Flash 001',
15951
+ modelName: 'gemini-1.5-flash-001',
15952
+ modelDescription: 'First stable release of Gemini 1.5 Flash model with reliable performance characteristics for production applications. 1M token context window.',
15953
+ },
15954
+ {
15955
+ modelVariant: 'CHAT',
15956
+ modelTitle: 'Gemini 1.5 Flash 002',
15957
+ modelName: 'gemini-1.5-flash-002',
15958
+ modelDescription: 'Improved version of Gemini 1.5 Flash with enhanced instruction following and more consistent outputs. Refined for better application integration.',
15959
+ },
15960
+ {
15961
+ modelVariant: 'CHAT',
15962
+ modelTitle: 'Gemini 1.5 Flash Exp',
15963
+ modelName: 'gemini-1.5-flash-exp-0827',
15964
+ modelDescription: 'Experimental version of Gemini 1.5 Flash with new capabilities being tested. May offer improved performance but with potential behavior differences from stable releases.',
15965
+ },
15966
+ {
15967
+ modelVariant: 'CHAT',
15968
+ modelTitle: 'Gemini 1.5 Flash 8B',
15969
+ modelName: 'gemini-1.5-flash-8b',
15970
+ modelDescription: 'Compact 8B parameter model optimized for efficiency and deployment in resource-constrained environments. Good performance despite smaller size.',
15971
+ },
15972
+ {
15973
+ modelVariant: 'CHAT',
15974
+ modelTitle: 'Gemini 1.5 Flash 8B Latest',
15975
+ modelName: 'gemini-1.5-flash-8b-latest',
15976
+ modelDescription: 'Points to the most recent version of the compact 8B parameter model, providing latest improvements while maintaining a small footprint.',
15977
+ },
15978
+ {
15979
+ modelVariant: 'CHAT',
15980
+ modelTitle: 'Gemini 1.5 Flash 8B Exp',
15981
+ modelName: 'gemini-1.5-flash-8b-exp-0924',
15982
+ modelDescription: 'Experimental version of the 8B parameter model with new capabilities and optimizations being evaluated for future stable releases.',
15983
+ },
15984
+ {
15985
+ modelVariant: 'CHAT',
15986
+ modelTitle: 'Gemini 1.5 Flash 8B Exp',
15987
+ modelName: 'gemini-1.5-flash-8b-exp-0827',
15988
+ modelDescription: 'August experimental release of the efficient 8B parameter model with specific improvements to reasoning capabilities and response quality.',
15989
+ },
15990
+ {
15991
+ modelVariant: 'CHAT',
15992
+ modelTitle: 'Gemini 1.5 Pro Latest',
15993
+ modelName: 'gemini-1.5-pro-latest',
15994
+ modelDescription: 'Points to the most recent version of the flagship Gemini 1.5 Pro model, ensuring access to the latest capabilities and improvements.',
15995
+ pricing: {
15996
+ prompt: computeUsage(`$7.00 / 1M tokens`),
15997
+ output: computeUsage(`$21.00 / 1M tokens`),
15998
+ },
15999
+ },
16000
+ {
16001
+ modelVariant: 'CHAT',
16002
+ modelTitle: 'Gemini 1.5 Pro',
16003
+ modelName: 'gemini-1.5-pro',
16004
+ modelDescription: 'Flagship multimodal model with strong performance across text, code, vision, and audio tasks. 1M token context window with excellent reasoning capabilities.',
16005
+ pricing: {
16006
+ prompt: computeUsage(`$7.00 / 1M tokens`),
16007
+ output: computeUsage(`$21.00 / 1M tokens`),
16008
+ },
16009
+ },
16010
+ {
16011
+ modelVariant: 'CHAT',
16012
+ modelTitle: 'Gemini 1.5 Pro 001',
16013
+ modelName: 'gemini-1.5-pro-001',
16014
+ modelDescription: 'First stable release of Gemini 1.5 Pro with consistent performance characteristics and reliable behavior for production applications.',
16015
+ },
16016
+ {
16017
+ modelVariant: 'CHAT',
16018
+ modelTitle: 'Gemini 1.5 Pro 002',
16019
+ modelName: 'gemini-1.5-pro-002',
16020
+ modelDescription: 'Refined version of Gemini 1.5 Pro with improved instruction following, better multimodal understanding, and more consistent outputs.',
16021
+ },
16022
+ {
16023
+ modelVariant: 'CHAT',
16024
+ modelTitle: 'Gemini 1.5 Pro Exp',
16025
+ modelName: 'gemini-1.5-pro-exp-0827',
16026
+ modelDescription: 'Experimental version of Gemini 1.5 Pro with new capabilities and optimizations being tested before wider release. May offer improved performance.',
16027
+ },
16028
+ {
16029
+ modelVariant: 'CHAT',
16030
+ modelTitle: 'Gemini 1.0 Pro',
16031
+ modelName: 'gemini-1.0-pro',
16032
+ modelDescription: 'Original Gemini series foundation model with solid multimodal capabilities. 32K context window with good performance on text, code, and basic vision tasks.',
16033
+ pricing: {
16034
+ prompt: computeUsage(`$0.35 / 1M tokens`),
16035
+ output: computeUsage(`$1.05 / 1M tokens`),
16036
+ },
16037
+ },
16038
+ // <- [🕕]
16039
+ ],
16040
+ });
16041
+ /**
16042
+ * TODO: [🧠] Add information about context window sizes, capabilities, and relative performance characteristics
16043
+ * TODO: [🎰] Some mechanism to auto-update available models
16044
+ * TODO: [🧠] Verify pricing information is current with Google's official documentation
16045
+ * Note: [💞] Ignore a discrepancy between file name and entity name
16046
+ */
16047
+
15818
16048
  /**
15819
16049
  * Execution Tools for calling Google Gemini API.
15820
16050
  *
@@ -15836,29 +16066,7 @@
15836
16066
  title: 'Google',
15837
16067
  description: 'Implementation of Google models',
15838
16068
  vercelProvider: googleGeminiVercelProvider,
15839
- availableModels: [
15840
- // TODO: [🕘] Maybe list models in same way as in other providers - in separate file with metadata
15841
- 'gemini-2.5-pro-preview-03-25',
15842
- 'gemini-2.0-flash',
15843
- 'gemini-2.0-flash-lite',
15844
- 'gemini-2.0-flash-thinking-exp-01-21',
15845
- 'gemini-1.5-flash',
15846
- 'gemini-1.5-flash-latest',
15847
- 'gemini-1.5-flash-001',
15848
- 'gemini-1.5-flash-002',
15849
- 'gemini-1.5-flash-exp-0827',
15850
- 'gemini-1.5-flash-8b',
15851
- 'gemini-1.5-flash-8b-latest',
15852
- 'gemini-1.5-flash-8b-exp-0924',
15853
- 'gemini-1.5-flash-8b-exp-0827',
15854
- 'gemini-1.5-pro-latest',
15855
- 'gemini-1.5-pro',
15856
- 'gemini-1.5-pro-001',
15857
- 'gemini-1.5-pro-002',
15858
- 'gemini-1.5-pro-exp-0827',
15859
- 'gemini-1.0-pro',
15860
- // <- [🕕]
15861
- ].map((modelName) => ({ modelName, modelVariant: 'CHAT' })),
16069
+ availableModels: GOOGLE_MODELS,
15862
16070
  ...options,
15863
16071
  });
15864
16072
  }, {