Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(openai_dart): Add support for Assistants API #278

Merged
merged 1 commit into from
Dec 24, 2023
Merged

Conversation

davidmigloz
Copy link
Owner

Assistants (beta)

Build assistants that can call models and use tools to perform tasks.

Get started with the Assistants API

Create assistant:

final res = await client.createAssistant(
  request: CreateAssistantRequest(
    model: CreateAssistantRequestModel.string('gpt-4'),
    name: 'Math Tutor',
    description: 'Help students with math homework',
    instructions: 'You are a personal math tutor. Write and run code to answer math questions.',
    tools: [AssistantTools.codeInterpreter()],
  ),
);

Create assistant file:

final res = await client.createAssistantFile(
  assistantId: assistantId,
  request: CreateAssistantFileRequest(fileId: fileId),
);

List assistants:

final res = await client.listAssistants();

List assistant files:

final res = await client.listAssistantFiles(assistantId: assistantId);

Retrieve assistant:

final res = await client.getAssistant(assistantId: assistantId);

Retrieve assistant file:

final res = await client.getAssistantFile(assistantId: assistantId, fileId: fileId);

Modify assistant:

final res = await client.modifyAssistant(
  assistantId: assistantId,
  request: ModifyAssistantRequest(name: 'New name'),
);

Delete assistant:

final res = await client.deleteAssistant(assistantId: assistantId);

Delete assistant file:

final res = await client.deleteAssistantFile(assistantId: assistantId, fileId: fileId);

Threads (beta)

Create threads that assistants can interact with.

Related guide: Assistants

Create thread:

final res = await client.createThread(
  request: CreateThreadRequest(),
);

Retrieve thread:

final res = await client.getThread(threadId: threadId);

Modify thread:

final res = await client.modifyThread(
  threadId: threadId,
  request: ModifyThreadRequest(metadata: {'new': 'metadata'}),
);

Delete thread:

final res = await client.deleteThread(threadId: threadId);

Messages (beta)

Create messages within threads.

Related guide: Assistants

Create message:

final res = await client.createThreadMessage(
  threadId: threadId,
  request: CreateMessageRequest(
    role: CreateMessageRequestRole.user,
    content: 'I need to solve the equation `3x + 11 = 14`. Can you help me?',
  ),
);

List messages:

final res = await client.listThreadMessages(threadId: threadId);

List message files:

final res = await client.listThreadMessageFiles(threadId: threadId, messageId: messageId);

Retrieve message:

final res = await client.getThreadMessage(threadId: threadId, messageId: messageId);

Retrieve message file:

final res = await client.getThreadMessageFile(
  threadId: threadId,
  messageId: messageId,
  fileId: fileId,
);

Modify message:

final res = await client.modifyThreadMessage(
  threadId: threadId,
  messageId: messageId,
  request: ModifyMessageRequest(metadata: {'new': 'metadata'}),
);

Runs (beta)

Represents an execution run on a thread.

Related guide: Assistants

Create run:

final res = await client.createThreadRun(
  threadId: threadId,
  request: CreateRunRequest(
    assistantId: assistantId,
    instructions: 'Please address the user as Jane Doe. The user has a premium account.',
  ),
);

Create thread and run:

final res = await client.createThreadAndRun(
  request: CreateThreadAndRunRequest(
    assistantId: assistantId,
    instructions: 'Please address the user as Jane Doe. The user has a premium account.',
  ),
);

List runs:

final res = await client.listThreadRuns(threadId: threadId);

List run steps:

final res = await client.listThreadRunSteps(threadId: threadId, runId: runId);

Retrieve run:

final res = await client.getThreadRun(threadId: threadId, runId: runId);

Retrieve run step:

final res = await client.getThreadRunStep(threadId: threadId, runId: runId, stepId: stepId);

Modify run:

final res = await client.modifyThreadRun(
  threadId: threadId,
  runId: runId,
  request: ModifyRunRequest(metadata: {'new': 'metadata'}),
);

Submit tool outputs to run:

final res = await client.submitThreadToolOutputsToRun(
  threadId: threadId,
  runId: runId,
  request: SubmitToolOutputsRunRequest(
    toolOutputs: [
      RunSubmitToolOutput(
        toolCallId: 'call_abc123',
        output: '28C',
      ),
    ],
  ),
);

Cancel a run:

final res = await client.cancelThreadRun(threadId: threadId, runId: runId);

@davidmigloz davidmigloz self-assigned this Dec 24, 2023
@davidmigloz davidmigloz added t:enhancement New feature or request p:openai_dart openai_dart package. labels Dec 24, 2023
@davidmigloz davidmigloz added this to the v0.4.0 milestone Dec 24, 2023
@davidmigloz davidmigloz merged commit 06de2d5 into main Dec 24, 2023
1 check passed
@davidmigloz davidmigloz deleted the assistant branch December 24, 2023 00:07
KennethKnudsen97 pushed a commit to KennethKnudsen97/langchain_dart that referenced this pull request Apr 22, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
p:openai_dart openai_dart package. t:enhancement New feature or request
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

None yet

1 participant