Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
pluginName=Cognotik
pluginRepositoryUrl=https://github.com/SimiaCryptus/Cognotik
libraryGroup=com.simiacryptus
libraryVersion=2.0.19
libraryVersion=2.0.20

gradleVersion=8.13
org.gradle.caching=true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,9 @@ import com.simiacryptus.cognotik.plan.tools.SelfHealingTask
import com.simiacryptus.cognotik.plan.tools.SubPlanningTask
import com.simiacryptus.cognotik.plan.tools.mcp.MCPToolTask
import com.simiacryptus.cognotik.plan.tools.online.CrawlerAgentTask
import com.simiacryptus.cognotik.plan.tools.online.FetchMethod
import com.simiacryptus.cognotik.plan.tools.online.SeedMethod
import com.simiacryptus.cognotik.plan.tools.online.processing.ProcessingStrategyType
import com.simiacryptus.cognotik.plan.tools.online.fetch.FetchMethod
import com.simiacryptus.cognotik.plan.tools.online.seed.SeedMethod
import java.awt.Component
import java.awt.Dimension
import javax.swing.*
Expand Down Expand Up @@ -329,8 +330,17 @@ private fun com.intellij.ui.dsl.builder.Panel.createSubPlanningFields(config: Su



private fun com.intellij.ui.dsl.builder.Panel.createCrawlerFields(config: CrawlerAgentTask.CrawlerTaskTypeConfig) {
private fun com.intellij.ui.dsl.builder.Panel.createCrawlerFields(config: CrawlerAgentTask.CrawlerTaskTypeConfig) {
group("Web Crawler Settings") {
row("Processing Strategy:") {
val strategies = ProcessingStrategyType.entries.map { it.name }.toTypedArray()
val combo = ComboBox(strategies)
combo.selectedItem = config.processing_strategy?.name ?: "DefaultSummarizer"
combo.toolTipText = "Strategy for processing and analyzing page content"
cell(combo)
.comment("Select how pages should be processed and analyzed")
configFields["processing_strategy"] = combo
}
row("Seed Method:") {
val methods = SeedMethod.entries.map { it.name }.toTypedArray()
val combo = ComboBox(methods)
Expand All @@ -356,7 +366,7 @@ private fun com.intellij.ui.dsl.builder.Panel.createSubPlanningFields(config: Su
}
row("Max Pages Per Task:") {
val field = JBTextField(config.max_pages_per_task?.toString() ?: "30")
field.toolTipText = "Maximum number of pages to process (1-100)"
field.toolTipText = "Maximum number of pages to process (1-500)"
cell(field)
.comment("Limit the number of pages crawled per task")
configFields["max_pages_per_task"] = field
Expand Down Expand Up @@ -493,9 +503,9 @@ private fun com.intellij.ui.dsl.builder.Panel.createSubPlanningFields(config: Su
val maxPages = (configFields["max_pages_per_task"] as? JBTextField)?.text?.trim()
if (!maxPages.isNullOrEmpty()) {
val value = maxPages.toIntOrNull()
if (value == null || value !in 1..100) {
if (value == null || value !in 1..1000) {
Messages.showWarningDialog(
"Max Pages Per Task must be between 1 and 100",
"Max Pages Per Task must be between 1 and 1000",
"Invalid Value"
)
configFields["max_pages_per_task"]?.requestFocusInWindow()
Expand Down Expand Up @@ -645,11 +655,15 @@ private fun com.intellij.ui.dsl.builder.Panel.createSubPlanningFields(config: Su
}


is CrawlerAgentTask.CrawlerTaskTypeConfig -> {
is CrawlerAgentTask.CrawlerTaskTypeConfig -> {
CrawlerAgentTask.CrawlerTaskTypeConfig(
task_type = baseConfig.task_type!!,
name = baseConfig.name,
model = baseConfig.model,
processing_strategy = ProcessingStrategyType.valueOf(
(configFields["processing_strategy"] as? ComboBox<*>)?.selectedItem as? String
?: "DefaultSummarizer"
),
seed_method = SeedMethod.valueOf(
(configFields["seed_method"] as? ComboBox<*>)?.selectedItem as? String
?: "GoogleProxy"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ import java.util.*
import javax.imageio.ImageIO

/**
* Agent that processes images using multimodal chat models.
* Takes an input image and text prompt, and returns modified image with description.
* Agent that processes text/images input and generates text/images output based on the prompt.
* Can be used for image generation, image captioning, and image editing tasks.
*/
open class ImageModificationAgent(
open class ImageProcessingAgent(
prompt: String = "Analyze and describe the image based on the user's request",
name: String? = null,
model: ChatInterface,
Expand Down Expand Up @@ -57,15 +57,15 @@ open class ImageModificationAgent(
return ImageAndText(text = text, image = image ?: input.map { it.image }.firstOrNull())
}

override fun withModel(model: ChatInterface): ImageModificationAgent = ImageModificationAgent(
override fun withModel(model: ChatInterface): ImageProcessingAgent = ImageProcessingAgent(
prompt = prompt,
name = name,
model = model,
temperature = temperature,
)

companion object {
private val log = org.slf4j.LoggerFactory.getLogger(ImageModificationAgent::class.java)
private val log = org.slf4j.LoggerFactory.getLogger(ImageProcessingAgent::class.java)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import com.simiacryptus.cognotik.util.LoggerFactory
import com.simiacryptus.cognotik.util.MultiExeption
import com.simiacryptus.cognotik.util.ValidatedObject
import com.simiacryptus.cognotik.util.toContentList
import com.simiacryptus.cognotik.util.toJson
import java.util.function.Function

open class ParsedAgent<T : Any>(
Expand Down Expand Up @@ -175,4 +176,20 @@ open class ParsedAgent<T : Any>(
private val log = LoggerFactory.getLogger(ParsedAgent::class.java)
}

}
}


inline fun <reified T : Any> Any.parserCast(
model: ChatInterface, describer: TypeDescriber = object : AbbrevWhitelistYamlDescriber(
"com.simiacryptus", "aicoder.actions"
) {
override val includeMethods: Boolean get() = false
}
) : T = ParsedAgent(
prompt = "",
resultClass = T::class.java,
model = model,
parsingChatter = model,
describer = describer
).getParser().apply(this.toJson())

Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ open class ConversationalMode(
isProcessing = true
}

task.echo(userMessage.renderMarkdown())
task.echo(userMessage.renderMarkdown)
writeToTranscript("## User\n\n$userMessage\n\n")
this.task.ui.pool.submit {
try {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.simiacryptus.cognotik.plan.tools.file

import com.simiacryptus.cognotik.agents.ImageAndText
import com.simiacryptus.cognotik.agents.ImageModificationAgent
import com.simiacryptus.cognotik.agents.ImageProcessingAgent
import com.simiacryptus.cognotik.describe.Description
import com.simiacryptus.cognotik.plan.OrchestrationConfig
import com.simiacryptus.cognotik.plan.TaskOrchestrator
Expand Down Expand Up @@ -106,7 +106,7 @@ GenerateImage - Create images using AI image generation models
task.add(MarkdownUtil.renderMarkdown("### Generating image...", ui = task.ui))

// Use the image generation agent
val imageAgent = ImageModificationAgent(
val imageAgent = ImageProcessingAgent(
prompt = "Transform the user request into an image",
name = "ImageGenerator",
model = orchestrationConfig.imageChatChatter,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package com.simiacryptus.cognotik.plan.tools.file

import com.simiacryptus.cognotik.agents.ChatAgent
import com.simiacryptus.cognotik.agents.ImageAndText
import com.simiacryptus.cognotik.agents.ImageModificationAgent
import com.simiacryptus.cognotik.agents.ImageProcessingAgent
import com.simiacryptus.cognotik.describe.Description
import com.simiacryptus.cognotik.plan.OrchestrationConfig
import com.simiacryptus.cognotik.plan.TaskOrchestrator
Expand Down Expand Up @@ -456,7 +456,7 @@ Provide only the CSS code within a code block:
ui = task.ui
)
)
val imageAgent = ImageModificationAgent(
val imageAgent = ImageProcessingAgent(
prompt = "Create a professional, visually appealing image for a presentation slide",
model = orchestrationConfig.imageChatChatter,
temperature = 0.7,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package com.simiacryptus.cognotik.plan.tools.file

import com.simiacryptus.cognotik.agents.ChatAgent
import com.simiacryptus.cognotik.agents.ImageAndText
import com.simiacryptus.cognotik.agents.ImageModificationAgent
import com.simiacryptus.cognotik.agents.ImageProcessingAgent
import com.simiacryptus.cognotik.apps.general.renderMarkdown
import com.simiacryptus.cognotik.describe.Description
import com.simiacryptus.cognotik.plan.OrchestrationConfig
Expand Down Expand Up @@ -240,7 +240,7 @@ DESCRIPTION: another detailed description
val filename = filename
try {
newTask.add(MarkdownUtil.renderMarkdown("Generating image: `$filename`...", ui = ui))
val imageAgent = ImageModificationAgent(
val imageAgent = ImageProcessingAgent(
prompt = "Create a high-quality image for a web page based on the description",
model = orchestrationConfig.imageChatChatter,
temperature = 0.7,
Expand Down
Loading
Loading