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

Support for OpenAI-Beta assistants v2 and streaming. #141

Merged
merged 3 commits into from
May 29, 2024
Merged
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
99 changes: 69 additions & 30 deletions src/OpenAi.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ class OpenAi
private string $engine = "davinci";
private string $model = "text-davinci-002";
private string $chatModel = "gpt-3.5-turbo";
private string $assistantsBetaVersion = "v1";
private array $headers;
private array $contentTypes;
private int $timeout = 0;
Expand Down Expand Up @@ -435,7 +436,7 @@ public function embeddings($opts)
public function createAssistant($data)
{
$data['model'] = $data['model'] ?? $this->chatModel;
$this->headers[] = 'OpenAI-Beta: assistants=v1';
$this->addAssistantsBetaHeader();
$url = Url::assistantsUrl();
$this->baseUrl($url);

Expand All @@ -448,7 +449,7 @@ public function createAssistant($data)
*/
public function retrieveAssistant($assistantId)
{
$this->headers[] = 'OpenAI-Beta: assistants=v1';
$this->addAssistantsBetaHeader();
$url = Url::assistantsUrl() . '/' . $assistantId;
$this->baseUrl($url);

Expand All @@ -462,7 +463,7 @@ public function retrieveAssistant($assistantId)
*/
public function modifyAssistant($assistantId, $data)
{
$this->headers[] = 'OpenAI-Beta: assistants=v1';
$this->addAssistantsBetaHeader();
$url = Url::assistantsUrl() . '/' . $assistantId;
$this->baseUrl($url);

Expand All @@ -475,7 +476,7 @@ public function modifyAssistant($assistantId, $data)
*/
public function deleteAssistant($assistantId)
{
$this->headers[] = 'OpenAI-Beta: assistants=v1';
$this->addAssistantsBetaHeader();
$url = Url::assistantsUrl() . '/' . $assistantId;
$this->baseUrl($url);

Expand All @@ -488,7 +489,7 @@ public function deleteAssistant($assistantId)
*/
public function listAssistants($query = [])
{
$this->headers[] = 'OpenAI-Beta: assistants=v1';
$this->addAssistantsBetaHeader();
$url = Url::assistantsUrl();
if (count($query) > 0) {
$url .= '?' . http_build_query($query);
Expand All @@ -505,7 +506,7 @@ public function listAssistants($query = [])
*/
public function createAssistantFile($assistantId, $fileId)
{
$this->headers[] = 'OpenAI-Beta: assistants=v1';
$this->addAssistantsBetaHeader();
$url = Url::assistantsUrl() . '/' . $assistantId . '/files';
$this->baseUrl($url);

Expand All @@ -519,7 +520,7 @@ public function createAssistantFile($assistantId, $fileId)
*/
public function retrieveAssistantFile($assistantId, $fileId)
{
$this->headers[] = 'OpenAI-Beta: assistants=v1';
$this->addAssistantsBetaHeader();
$url = Url::assistantsUrl() . '/' . $assistantId . '/files/' . $fileId;
$this->baseUrl($url);

Expand All @@ -533,7 +534,7 @@ public function retrieveAssistantFile($assistantId, $fileId)
*/
public function listAssistantFiles($assistantId, $query = [])
{
$this->headers[] = 'OpenAI-Beta: assistants=v1';
$this->addAssistantsBetaHeader();
$url = Url::assistantsUrl() . '/' . $assistantId . '/files';
if (count($query) > 0) {
$url .= '?' . http_build_query($query);
Expand All @@ -550,7 +551,7 @@ public function listAssistantFiles($assistantId, $query = [])
*/
public function deleteAssistantFile($assistantId, $fileId)
{
$this->headers[] = 'OpenAI-Beta: assistants=v1';
$this->addAssistantsBetaHeader();
$url = Url::assistantsUrl() . '/' . $assistantId . '/files/' . $fileId;
$this->baseUrl($url);

Expand All @@ -563,7 +564,7 @@ public function deleteAssistantFile($assistantId, $fileId)
*/
public function createThread($data = [])
{
$this->headers[] = 'OpenAI-Beta: assistants=v1';
$this->addAssistantsBetaHeader();
$url = Url::threadsUrl();
$this->baseUrl($url);

Expand All @@ -576,7 +577,7 @@ public function createThread($data = [])
*/
public function retrieveThread($threadId)
{
$this->headers[] = 'OpenAI-Beta: assistants=v1';
$this->addAssistantsBetaHeader();
$url = Url::threadsUrl() . '/' . $threadId;
$this->baseUrl($url);

Expand All @@ -590,7 +591,7 @@ public function retrieveThread($threadId)
*/
public function modifyThread($threadId, $data)
{
$this->headers[] = 'OpenAI-Beta: assistants=v1';
$this->addAssistantsBetaHeader();
$url = Url::threadsUrl() . '/' . $threadId;
$this->baseUrl($url);

Expand All @@ -603,7 +604,7 @@ public function modifyThread($threadId, $data)
*/
public function deleteThread($threadId)
{
$this->headers[] = 'OpenAI-Beta: assistants=v1';
$this->addAssistantsBetaHeader();
$url = Url::threadsUrl() . '/' . $threadId;
$this->baseUrl($url);

Expand All @@ -617,7 +618,7 @@ public function deleteThread($threadId)
*/
public function createThreadMessage($threadId, $data)
{
$this->headers[] = 'OpenAI-Beta: assistants=v1';
$this->addAssistantsBetaHeader();
$url = Url::threadsUrl() . '/' . $threadId . '/messages';
$this->baseUrl($url);

Expand All @@ -631,7 +632,7 @@ public function createThreadMessage($threadId, $data)
*/
public function retrieveThreadMessage($threadId, $messageId)
{
$this->headers[] = 'OpenAI-Beta: assistants=v1';
$this->addAssistantsBetaHeader();
$url = Url::threadsUrl() . '/' . $threadId . '/messages/' . $messageId;
$this->baseUrl($url);

Expand All @@ -646,7 +647,7 @@ public function retrieveThreadMessage($threadId, $messageId)
*/
public function modifyThreadMessage($threadId, $messageId, $data)
{
$this->headers[] = 'OpenAI-Beta: assistants=v1';
$this->addAssistantsBetaHeader();
$url = Url::threadsUrl() . '/' . $threadId . '/messages/' . $messageId;
$this->baseUrl($url);

Expand All @@ -660,7 +661,7 @@ public function modifyThreadMessage($threadId, $messageId, $data)
*/
public function listThreadMessages($threadId, $query = [])
{
$this->headers[] = 'OpenAI-Beta: assistants=v1';
$this->addAssistantsBetaHeader();
$url = Url::threadsUrl() . '/' . $threadId . '/messages';
if (count($query) > 0) {
$url .= '?' . http_build_query($query);
Expand All @@ -678,7 +679,7 @@ public function listThreadMessages($threadId, $query = [])
*/
public function retrieveMessageFile($threadId, $messageId, $fileId)
{
$this->headers[] = 'OpenAI-Beta: assistants=v1';
$this->addAssistantsBetaHeader();
$url = Url::threadsUrl() . '/' . $threadId . '/messages/' . $messageId . '/files/' . $fileId;
$this->baseUrl($url);

Expand All @@ -693,7 +694,7 @@ public function retrieveMessageFile($threadId, $messageId, $fileId)
*/
public function listMessageFiles($threadId, $messageId, $query = [])
{
$this->headers[] = 'OpenAI-Beta: assistants=v1';
$this->addAssistantsBetaHeader();
$url = Url::threadsUrl() . '/' . $threadId . '/messages/' . $messageId . '/files';
if (count($query) > 0) {
$url .= '?' . http_build_query($query);
Expand All @@ -708,9 +709,19 @@ public function listMessageFiles($threadId, $messageId, $query = [])
* @param array $data
* @return bool|string
*/
public function createRun($threadId, $data)
public function createRun($threadId, $data, $stream = null)
{
$this->headers[] = 'OpenAI-Beta: assistants=v1';
if (array_key_exists('stream', $data) && $data['stream']) {
if ($stream == null) {
throw new Exception(
'Please provide a stream function. Check https://github.com/orhanerday/open-ai#stream-example for an example.'
);
}

$this->stream_method = $stream;
}

$this->addAssistantsBetaHeader();
$url = Url::threadsUrl() . '/' . $threadId . '/runs';
$this->baseUrl($url);

Expand All @@ -724,7 +735,7 @@ public function createRun($threadId, $data)
*/
public function retrieveRun($threadId, $runId)
{
$this->headers[] = 'OpenAI-Beta: assistants=v1';
$this->addAssistantsBetaHeader();
$url = Url::threadsUrl() . '/' . $threadId . '/runs/' . $runId;
$this->baseUrl($url);

Expand All @@ -739,7 +750,7 @@ public function retrieveRun($threadId, $runId)
*/
public function modifyRun($threadId, $runId, $data)
{
$this->headers[] = 'OpenAI-Beta: assistants=v1';
$this->addAssistantsBetaHeader();
$url = Url::threadsUrl() . '/' . $threadId . '/runs/' . $runId;
$this->baseUrl($url);

Expand All @@ -753,7 +764,7 @@ public function modifyRun($threadId, $runId, $data)
*/
public function listRuns($threadId, $query = [])
{
$this->headers[] = 'OpenAI-Beta: assistants=v1';
$this->addAssistantsBetaHeader();
$url = Url::threadsUrl() . '/' . $threadId . '/runs';
if (count($query) > 0) {
$url .= '?' . http_build_query($query);
Expand All @@ -769,9 +780,19 @@ public function listRuns($threadId, $query = [])
* @param array $outputs
* @return bool|string
*/
public function submitToolOutputs($threadId, $runId, $outputs)
public function submitToolOutputs($threadId, $runId, $outputs, $stream = null)
{
$this->headers[] = 'OpenAI-Beta: assistants=v1';
if (array_key_exists('stream', $outputs) && $outputs['stream']) {
if ($stream == null) {
throw new Exception(
'Please provide a stream function. Check https://github.com/orhanerday/open-ai#stream-example for an example.'
);
}

$this->stream_method = $stream;
}

$this->addAssistantsBetaHeader();
$url = Url::threadsUrl() . '/' . $threadId . '/runs/' . $runId . '/submit_tool_outputs';
$this->baseUrl($url);

Expand All @@ -785,7 +806,7 @@ public function submitToolOutputs($threadId, $runId, $outputs)
*/
public function cancelRun($threadId, $runId)
{
$this->headers[] = 'OpenAI-Beta: assistants=v1';
$this->addAssistantsBetaHeader();
$url = Url::threadsUrl() . '/' . $threadId . '/runs/' . $runId . '/cancel';
$this->baseUrl($url);

Expand All @@ -798,7 +819,7 @@ public function cancelRun($threadId, $runId)
*/
public function createThreadAndRun($data)
{
$this->headers[] = 'OpenAI-Beta: assistants=v1';
$this->addAssistantsBetaHeader();
$url = Url::threadsUrl() . '/runs';
$this->baseUrl($url);

Expand All @@ -813,7 +834,7 @@ public function createThreadAndRun($data)
*/
public function retrieveRunStep($threadId, $runId, $stepId)
{
$this->headers[] = 'OpenAI-Beta: assistants=v1';
$this->addAssistantsBetaHeader();
$url = Url::threadsUrl() . '/' . $threadId . '/runs/' . $runId . '/steps/' . $stepId;
$this->baseUrl($url);

Expand All @@ -828,7 +849,7 @@ public function retrieveRunStep($threadId, $runId, $stepId)
*/
public function listRunSteps($threadId, $runId, $query = [])
{
$this->headers[] = 'OpenAI-Beta: assistants=v1';
$this->addAssistantsBetaHeader();
$url = Url::threadsUrl() . '/' . $threadId . '/runs/' . $runId . '/steps';
if (count($query) > 0) {
$url .= '?' . http_build_query($query);
Expand Down Expand Up @@ -918,6 +939,24 @@ public function setORG(string $org)
$this->headers[] = "OpenAI-Organization: $org";
}
}

/**
* @param string $org
*/
public function setAssistantsBetaVersion(string $version)
{
if ($version != "") {
$this->assistantsBetaVersion = $version;
}
}

/**
* @return void
*/
private function addAssistantsBetaHeader(){
$this->headers[] = 'OpenAI-Beta: assistants='.$this->assistantsBetaVersion;
}


/**
* @param string $url
Expand Down