old-agentic-v1^2
Travis Fischer 2023-06-16 18:06:20 -07:00
rodzic 6e823e7d97
commit c932ae50d1
4 zmienionych plików z 102 dodań i 0 usunięć

83
examples/hf0-demo.ts vendored 100644
Wyświetl plik

@ -0,0 +1,83 @@
import { OpenAIClient } from '@agentic/openai-fetch'
import 'dotenv/config'
import { z } from 'zod'
import {
Agentic,
HumanFeedbackMechanismTwilio,
SearchAndCrawlTool,
WeatherTool,
withHumanFeedback
} from '@/index'
async function main() {
const openai = new OpenAIClient({ apiKey: process.env.OPENAI_API_KEY! })
const agentic = new Agentic({ openai })
const topic = process.argv[2] || 'OpenAI'
const res0 = await withHumanFeedback(
agentic
.gpt4({
messages: [
{
role: 'system',
content: `You are a MckInsey analyst who is an expert at writing executive summaries.`
},
{
role: 'user',
content: `What are the 3 most important questions we would need to answer in order to have a thorough understanding of this topic: {{topic}}? Be concise but creative in your questions, and make sure to capture the true essence of the topic.`
}
],
model: 'gpt-4',
temperature: 1.0
})
.input(
z.object({
topic: z.string()
})
)
.output(z.array(z.string()).describe('question')),
{
type: 'selectN',
mechanism: HumanFeedbackMechanismTwilio
}
).callWithMetadata({ topic })
console.log()
console.log()
console.log(`Questions: ${res0.result}`)
console.log()
console.log()
const questions: string[] = (res0.metadata.feedback as any)!.selected
const res = await agentic
.gpt4({
messages: [
{
role: 'system',
content: `You are a MckInsey analyst who is an expert at writing executive summaries.`
},
{
role: 'user',
content: `Write a thorough executive summary on this topic: {{topic}}.
In order to do this, you will need to answer the following questions: \n{{#questions}}- {{.}}\n{{/questions}}`
}
],
model: 'gpt-4-32k'
})
.tools([new SearchAndCrawlTool(), new WeatherTool()])
.input(
z.object({
topic: z.string(),
questions: z.array(z.string())
})
)
.call({ topic, questions })
console.log('\n\n\n')
console.log(res)
}
main()

Wyświetl plik

@ -1,7 +1,11 @@
import { TimeoutError as KyTimeoutError } from 'ky'
import { TimeoutError } from 'p-timeout'
import type { Jsonifiable } from 'type-fest'
import type { ZodError } from 'zod'
import { ValidationError, fromZodError } from 'zod-validation-error'
export { TimeoutError, KyTimeoutError }
export type ErrorOptions = {
/** HTTP status code for the error. */
status?: number

Wyświetl plik

@ -216,6 +216,11 @@ export abstract class HumanFeedbackMechanism<
choices.push(HumanFeedbackUserActions.Abort)
}
this._agentic.logger.info(
choices,
`>>> Human feedback ${this.constructor.name} ${msg}`
)
const choice =
choices.length === 1
? HumanFeedbackUserActions.Select
@ -291,6 +296,10 @@ export abstract class HumanFeedbackMechanism<
})
}
this._agentic.logger.info(
feedback,
`<<< Human feedback ${this.constructor.name} ${msg}`
)
return feedback as FeedbackTypeToMetadata<T>
}
}

Wyświetl plik

@ -192,6 +192,12 @@ export abstract class BaseTask<
} else if (err instanceof errors.HumanFeedbackDeclineError) {
ctx.retryMessage = err.message
return
} else if (
err instanceof errors.KyTimeoutError ||
err instanceof errors.TimeoutError ||
(err as any).name === 'TimeoutError'
) {
// TODO
} else if ((err.cause as any)?.code === 'UND_ERR_HEADERS_TIMEOUT') {
// TODO: This is a pretty common OpenAI error, and I think it either has
// to do with OpenAI's servers being flaky or the combination of Node.js