Skip to content

Commit

Permalink
feat(Cohere): Added Cohere to list of supported models and more...
Browse files Browse the repository at this point in the history
- Added Cohere Driver
- Refactored code
- Added ability to design the request using requestRules
- Removed config and instead reference in the driver
- Updated Playground on Conversations to allow the user to change AI/Model
- Ability to modify the key for certain colums when building up array for payload

This is mainly prep for a future release, there are still a few things that need ironing out before it can tagged as a new version
  • Loading branch information
PapaRascal2020 committed Sep 7, 2024
1 parent a8c7bac commit c5c15c9
Show file tree
Hide file tree
Showing 14 changed files with 379 additions and 156 deletions.
43 changes: 0 additions & 43 deletions config/config.php

This file was deleted.

14 changes: 13 additions & 1 deletion resources/views/sidekick-examples/chat.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,20 @@
<!-- Input Area -->
<footer class="bg-slate-900 p-4">
<form method="POST" action="/sidekick/playground/chat">
<div class="flex">
<div class="flex gap-4">
@csrf
<select name="engine" class="text-black">
<option value="\PapaRascalDev\Sidekick\Drivers\OpenAi|gpt-3.5-turbo">Open AI : GPT 3.5 Turbo</option>
<option value="\PapaRascalDev\Sidekick\Drivers\OpenAi|gpt-4">Open AI : GPT 4</option>
<option value="\PapaRascalDev\Sidekick\Drivers\Mistral|mistral-small-latest">Mistral : Small</option>
<option value="\PapaRascalDev\Sidekick\Drivers\Mistral|mistral-medium-latest">Mistral : Medium</option>
<option value="\PapaRascalDev\Sidekick\Drivers\Mistral|mistral-large-latest">Mistral : Large</option>
<option value="\PapaRascalDev\Sidekick\Drivers\Mistral|open-mistral-7b">Mistral : Open Mistral 7B</option>
<option value="\PapaRascalDev\Sidekick\Drivers\Claude|claude-3-opus-20240229">Claude : Opus</option>
<option value="\PapaRascalDev\Sidekick\Drivers\Claude|claude-3-sonnet-20240229">Claude: Sonnet</option>
<option value="\PapaRascalDev\Sidekick\Drivers\Claude|claude-3-haiku-20240307">Claude: Haiku</option>
<option value="\PapaRascalDev\Sidekick\Drivers\Cohere|">Cohere : Auto-Select</option>
</select>
<input type="text" name="message" class="flex-1 text-black border border-gray-300 rounded-md p-2 focus:outline-none focus:border-blue-600" placeholder="Type your message...">
<button class="bg-blue-600 text-white px-4 py-2 ml-2 rounded-md hover:bg-blue-700">Send</button>
</div>
Expand Down
5 changes: 3 additions & 2 deletions resources/views/sidekick-examples/chatroom.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,15 @@
@section('content')
<!-- Header -->
<header class="bg-slate-900 shadow p-4 flex justify-between items-center">
<h1 class="text-xl text-white font-semibold text-gray-900">Conversation (id: {{$response['conversation_id']}})</h1>
<h1 class="text-xl text-white font-semibold text-gray-900">Conversation <small class="text-sm">(id: {{$response['conversation_id'] ?? request()->get('conversation_id')}}) - Engine: {{$options}}</small></h1>
<a href="/sidekick/playground/chat" class="bg-blue-600 text-white px-4 py-2 rounded-md hover:bg-blue-700">New Chat</a>
</header>

<!-- Chat Messages Area -->
<div id="scrollableDiv" class="bg-slate-700 flex-1 p-6 overflow-y-auto">
<div class="space-y-4">
@foreach($response['messages'] as $message)
@if($message['role'] === 'user')
@if(strtolower($message['role']) === 'user')
<div class="flex items-start">
<div class="bg-gray-200 p-4 rounded-lg w-3/4">
<p class="text-gray-800 font-bold">&#128583; User</p>
Expand All @@ -40,6 +40,7 @@
<div class="flex">
@csrf
<input type="hidden" name="conversation_id" value="{{$response['conversation_id']}}" />
<input type="hidden" name="engine" value="{{$options}}" />
<input type="text" name="message" class="flex-1 border border-gray-300 text-black rounded-md p-2 focus:outline-none focus:border-blue-600" placeholder="Type your message...">
<button class="bg-blue-600 text-white px-4 py-2 ml-2 rounded-md hover:bg-blue-700">Send</button>
</div>
Expand Down
25 changes: 16 additions & 9 deletions routes/web.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use PapaRascalDev\Sidekick\Drivers\Claude;
use PapaRascalDev\Sidekick\Drivers\Cohere;
use PapaRascalDev\Sidekick\Drivers\Mistral;
use \PapaRascalDev\Sidekick\Sidekick;
use \PapaRascalDev\Sidekick\Drivers\OpenAi;
use PapaRascalDev\Sidekick\SidekickConversation;
Expand All @@ -11,28 +14,30 @@
});

Route::post('/sidekick/playground/chat', function (Request $request) {
$sidekick = new SidekickConversation(new OpenAi());
$options = explode("|", $request->get('engine'));
$sidekick = new SidekickConversation(new $options[0]());

$conversation = $sidekick->begin(
model: 'gpt-3.5-turbo',
model: $options[1],
systemPrompt: 'Your Sidekick, a robot to chat to users'
);

$response = $conversation->sendMessage($request->get('message'));

return view('sidekick::sidekick-examples.chatroom', ['response' => $response]);
return view('sidekick::sidekick-examples.chatroom', ['response' => $response, 'options' => $options[0]]);
});

Route::post('/sidekick/playground/chat/update', function (Request $request) {
$sidekick = new SidekickConversation(new OpenAi());
$engine = $request->get('engine');
$sidekick = new SidekickConversation(new $engine());

$conversation = $sidekick->resume(
conversationId: $request->get('conversation_id')
);

$response = $conversation->sendMessage($request->get('message'));

return view('sidekick::sidekick-examples.chatroom', ['response' => $response]);
return view('sidekick::sidekick-examples.chatroom', ['response' => $response, 'options' => $engine]);
});

Route::get('/sidekick/playground/chat', function () {
Expand All @@ -44,14 +49,16 @@
});

Route::post('/sidekick/playground/completion', function (Request $request) {
$sidekick = Sidekick::create(new OpenAi());
$sidekick = Sidekick::create(new Cohere());
$response = $sidekick->complete()->sendMessage(
model: 'gpt-3.5-turbo',
model: '',
systemPrompt: 'You are a knowledge base, please answer there questions',
messages:[['role' => 'user', 'content' => $request->get('message')]]
message: $request->get('message'),
);

return view('sidekick::sidekick-examples.completion', ['response' => $sidekick->uniformedResponse($response)]);
$result = $sidekick->validate($response) ? $sidekick->getResponse($response) : $sidekick->getErrorMessage($response);

return view('sidekick::sidekick-examples.completion', ['response' => $result]);
});

Route::get('/sidekick/playground/audio', function () {
Expand Down
44 changes: 37 additions & 7 deletions src/Drivers/Claude.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,36 @@

class Claude implements Driver
{
protected array $config;

/**
* Grabs the config.
* OpenAi Api Base URL
* @strind $baseUrl
*/
private string $baseUrl = "https://api.anthropic.com/v1";

/**
* Headers
*
* To be passed with every request
*
* @array $headers
*/
protected array $headers;

public array $messageRoles = [
'user' => 'user',
'assistant' => 'assistant'
];

public bool $listAsObject = false;
public array $chatMaps = [];

function __construct()
{
$this->config = config('sidekick.config.driver.Claude');
$this->headers = [
'anthropic-version' => '2023-06-01',
'x-api-key' => getenv('SIDEKICK_CLAUDE_TOKEN')
];
}

/**
Expand All @@ -22,10 +44,18 @@ function __construct()
public function complete(): Completion
{
return new Completion(
url: $this->config['baseUrl'].$this->config['services']['completion'],
headers: $this->config['headers'],
inlinePrompt: false,
submitTypes: true
url: "{$this->baseUrl}/messages",
headers: $this->headers,
requestRules: [
'model' => '$model',
'max_tokens' => '$maxTokens',
'system' => '$systemPrompt ?? null',
'messages' => [
'$allMessages ? $allMessages : null',
'["role" => "user", "content" => $message]',
]
],
responseFormat: []
);
}

Expand Down
97 changes: 97 additions & 0 deletions src/Drivers/Cohere.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
<?php

namespace PapaRascalDev\Sidekick\Drivers;

use PapaRascalDev\Sidekick\Features\Completion;

class Cohere implements Driver
{

/**
* OpenAi Api Base URL
* @strind $baseUrl
*/
private string $baseUrl = "https://api.cohere.com/v1";

/**
* Headers
*
* To be passed with every request
*
* @array $headers
*/
protected array $headers;

public array $messageRoles = [
'user' => 'USER',
'assistant' => 'CHATBOT'
];

public bool $listAsObject = true;

public array $chatMaps = [
'content' => 'message'
];


function __construct()
{
$apiToken = getenv("SIDEKICK_COHERE_TOKEN");

$this->headers = [
"Authorization" => "Bearer {$apiToken}",
"Content-Type" => "application/json",
"Accept" => "application/json",
];
}

/**
* @return Completion
*/
public function complete(): Completion
{
return new Completion(
url: "{$this->baseUrl}/chat",
headers: $this->headers,
requestRules: [
'chat_history' => '$allMessages ? $allMessages : null',
'message' => '$message'
],
responseFormat: []
);
}

/**
* @param $response
* @return mixed
*/
public function getResponse($response)
{
return $response['text'];
}

/**
* @param $response
* @return array
*/
public function getErrorMessage($response)
{
return [
'driver' => 'Cohere',
'error' => [
'type' => 'error',
'code' => null,
'message' => $response['message']
]
];
}

/**
* @param $response
* @return bool
*/
public function validate($response): bool
{
return !(isset($response['message']));
}
}
3 changes: 3 additions & 0 deletions src/Drivers/Driver.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,7 @@
interface Driver
{
public function complete();
public function getErrorMessage(array $response);
public function getResponse(array $response);

}
Loading

0 comments on commit c5c15c9

Please sign in to comment.