feat: generate and fix scripts using Autopilot powered by OpenAI #1827)

* feat(frontend): generate simple script from prompt

* feat(backend): add OpenAI key workspace settings

* feat(frontend): add OpenAI key workplace settings

* feat: proxy to backend + support all languages

* fix: openapi spec

* feat: ScriptGen new UI + gpt 4

* fix: openai key sqlx data

* fix: diffEditor optional

* feat: beta + minor improvements

* feat: resource type support

* feat: edit with AI

* feat: AI fix

* feat: minor improvements
content max length, format, env info

* fix: minor
This commit is contained in:
HugoCasa
2023-07-12 17:07:45 +02:00
committed by GitHub
parent 8bfe1771ba
commit 012ea2dc0a
21 changed files with 1651 additions and 72 deletions
+73
View File
@@ -66,6 +66,8 @@ pub fn workspaced_service() -> Router {
.route("/edit_deploy_to", post(edit_deploy_to))
.route("/tarball", get(tarball_workspace))
.route("/premium_info", get(premium_info))
.route("/edit_openai_key", post(edit_openai_key))
.route("/exists_openai_key", get(exists_openai_key) )
.route("/edit_error_handler", post(edit_error_handler));
#[cfg(feature = "enterprise")]
@@ -113,6 +115,7 @@ pub struct WorkspaceSettings {
pub plan: Option<String>,
pub webhook: Option<String>,
pub deploy_to: Option<String>,
pub openai_key: Option<String>,
pub error_handler: Option<String>,
}
@@ -153,6 +156,11 @@ struct EditWebhook {
webhook: Option<String>,
}
#[derive(Deserialize)]
struct EditOpenAIKey {
openai_key: Option<String>,
}
#[derive(Deserialize)]
struct CreateWorkspace {
id: String,
@@ -652,6 +660,71 @@ async fn edit_webhook(
Ok(format!("Edit webhook for workspace {}", &w_id))
}
async fn edit_openai_key(
authed: Authed,
Extension(db): Extension<DB>,
Path(w_id): Path<String>,
Authed { is_admin, username, .. }: Authed,
Json(eo): Json<EditOpenAIKey>,
) -> Result<String> {
require_admin(is_admin, &username)?;
let mut tx = db.begin().await?;
if let Some(openai_key) = &eo.openai_key {
sqlx::query!(
"UPDATE workspace_settings SET openai_key = $1 WHERE workspace_id = $2",
openai_key,
&w_id
)
.execute(&mut tx)
.await?;
} else {
sqlx::query!(
"UPDATE workspace_settings SET openai_key = NULL WHERE workspace_id = $1",
&w_id,
)
.execute(&mut tx)
.await?;
}
audit_log(
&mut tx,
&authed.username,
"workspaces.edit_openai_key",
ActionKind::Update,
&w_id,
Some(&authed.email),
Some([("openai_key", &format!("{:?}", eo.openai_key)[..])].into()),
)
.await?;
tx.commit().await?;
Ok(format!("Edit openai_key for workspace {}", &w_id))
}
async fn exists_openai_key(
Extension(db): Extension<DB>,
Path(w_id): Path<String>,
Authed { is_admin, username, .. }: Authed,
) -> JsonResult<bool> {
require_admin(is_admin, &username)?;
let mut tx = db.begin().await?;
let openai_key = sqlx::query_scalar!(
"SELECT openai_key FROM workspace_settings WHERE workspace_id = $1",
&w_id
)
.fetch_one(&mut tx)
.await
.map_err(|e| Error::InternalErr(format!("getting openai_key: {e}")))?;
tx.commit().await?;
let exists = openai_key.is_some();
Ok(Json(exists))
}
async fn edit_error_handler(
authed: Authed,